Re: [python] Fork - problém s přístupem k ro dičovské proměnné

2009-06-30 Tema obsahu Filip Bartmann
Super to je ono.
Moc děkuji za radu.

Dne Tue, 30 Jun 2009 13:05:17 +0200
Petr Messner  napsal(a):

> Ano, základem GUI v GTK (a i jinde) je smyčka - main event loop.
> Mimochodem, tato smyčka se dá udělat i ručně, pomocí
> gtk.events_pending() a gtk.main_iteration(block=True).
> 
> To mě vlastně přivedlo na myšlenku, můžeš si nastavit pravidelné
> volání nějakého kódu a v něm si tu hlasitost z Alsy zjišťovat -
> glib.timeout_add(interval, callback, ...). To už vypadá elegantně.
> Samozřejmě že ten volaný kód (callback) nesmí trvat moc dlouho, jinak
> bude GUI zamrzávat. Toto řešení mě mělo napadnout hned...
> 
> 2009/6/30 Filip Bartmann :
> > 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  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 :
> >> > 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@py.cz
> >> > http://www.py.cz/mailman/listinfo/python
> >> >
> >> ___
> >> Python mailing list
> >> Python@py.cz
> >> http://www.py.cz/mailman/listinfo/python
> > ___
> > Python mailing list
> > Python@py.cz
> > http://www.py.cz/mailman/listinfo/python
> >
> ___
> Python mailing list
> Python@py.cz
> http://www.py.cz/mailman/listinfo/python
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Fork - problém s přístupem k rodi čovské proměnné

2009-06-30 Tema obsahu Petr Messner
Ano, základem GUI v GTK (a i jinde) je smyčka - main event loop.
Mimochodem, tato smyčka se dá udělat i ručně, pomocí
gtk.events_pending() a gtk.main_iteration(block=True).

To mě vlastně přivedlo na myšlenku, můžeš si nastavit pravidelné
volání nějakého kódu a v něm si tu hlasitost z Alsy zjišťovat -
glib.timeout_add(interval, callback, ...). To už vypadá elegantně.
Samozřejmě že ten volaný kód (callback) nesmí trvat moc dlouho, jinak
bude GUI zamrzávat. Toto řešení mě mělo napadnout hned...

2009/6/30 Filip Bartmann :
> 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  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 :
>> > 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@py.cz
>> > http://www.py.cz/mailman/listinfo/python
>> >
>> ___
>> Python mailing list
>> Python@py.cz
>> http://www.py.cz/mailman/listinfo/python
> ___
> Python mailing list
> Python@py.cz
> http://www.py.cz/mailman/listinfo/python
>
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Fork - problém s přístupem k ro dičovské proměnné

2009-06-30 Tema obsahu Filip Bartmann
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  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 :
> > 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@py.cz
> > http://www.py.cz/mailman/listinfo/python
> >
> ___
> Python mailing list
> Python@py.cz
> http://www.py.cz/mailman/listinfo/python
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Fork - problém s přístupem k rodi čovské proměnné

2009-06-30 Tema obsahu Petr Messner
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 :
> 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@py.cz
> http://www.py.cz/mailman/listinfo/python
>
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


[python] Fork - problém s přístupem k ro dičovské proměnné

2009-06-30 Tema obsahu Filip Bartmann
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@py.cz
http://www.py.cz/mailman/listinfo/python