[python] Fork - problém s přístupem k rodičovské proměnné
Filip Bartmann
filbar na centrum.cz
Úterý Červen 30 12:17:29 CEST 2009
gtk.main() je co jsem prozatím ze zkoušení zjistil nekonečná smyčka a
jakmile spustím gtk.main(), tak se už žádný další kód, který není
vyvolán něcím v GUI nespustí, do ukončení gtk.main().
Proto to zkouším řešit přes podprocesy/vlákna. A kdybych to hlavního
procesu dal monitorování roury, tak bych to zase musel mít ve while
True, ne?
Jde to v Pythonu řešit nějak elegantněji?
Děkuji.
Dne Tue, 30 Jun 2009 12:05:02 +0200
Petr Messner <petr.messner na gmail.com> napsal(a):
> V půlce programu si to klidně forkneš a očekáváš, že z potomka si v
> pohodě můžeš měnit proměnné v rodičkovském procesu, navíc z obou
> procesů saháš do GTK? No fuj :-) GTK je myslím thread-safe (po nějaké
> inicializaci, pokud si dobře vzpomínám), ale že by i
> multiprocess-safe, to pochybuji :-)
>
> Doporučuji použít místo podprocesů vlákna nebo zařídit nějakou
> meziprocesovou komunikaci - nejjednodušeji asi rouru/socketpair - tak
> aby s GUI manipuloval jen jeden proces.
>
> PM
>
> 2009/6/30 Filip Bartmann <filbar na centrum.cz>:
> > V této části kódu:
> > ----------------------------------------------------------------------------------
> > def __init__(self):
> > self.mixer=alsa.Mixer();
> > if self.mixer.getmute()[0]==0:
> > self.icon=gtk.status_icon_new_from_stock(gtk.STOCK_YES);
> > else:
> > self.icon=gtk.status_icon_new_from_stock(gtk.STOCK_NO);
> >
> > pid=os.fork();
> > if pid==0:
> > while True:
> > mixer=alsa.Mixer();
> > if mixer.getmute()[0]==0:
> > print "UNMUTED";
> > self.icon.set_from_stock(gtk.STOCK_YES);
> > elif mixer.getmute()[0]==1:
> > print "MUTED";
> > self.icon.set_from_stock(gtk.STOCK_NO);
> > time.sleep(1);
> >
> > self.icon.connect("popup-menu",self.show_controls);
> > ----------------------------------------------------------------------------------
> >
> > mám problém v přístupem k self.icon v potomkovi. Na CMDLině mi to
> > sice správně hlási MUTED/UNMUTED ale ikona se nemění. Nevíte kde
> > mám chybu?
> >
> > Za rady předem děkuji.
> >
> > Filip Bartmann
> > _______________________________________________
> > Python mailing list
> > Python na py.cz
> > http://www.py.cz/mailman/listinfo/python
> >
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
Další informace o konferenci Python