pipe no subprocesso travando

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

pipe no subprocesso travando

Thiago Ribeiro-4
Pessoal estou fazendo uma aplicação python + gtk que conta com subprocesso
(também python) que vai tratar alguns eventos, já que no windows temos
grandes problemas com threads.

Bom, a comunicação entre os processos é feita pelo subprocess.pipe e
coloquei um watch para verificar quando há algo para ler, só que quando dou
o read a aplicação trava, não consegue ler.

Segue o código abaixo:

def execute(self,std,cb_condition):
        if cb_condition == gobject.IO_IN:
            print "passei aqui"

            msg = std.read(1)

            print "mas não aqui"
            print "--> "+msg

            return True

gobject.io_add_watch(sys.stdin,gobject.IO_IN | gobject.IO_HUP,execute)

Alguém tem alguma idéia?

Thiago.


[As partes desta mensagem que não continham texto foram removidas]

Reply | Threaded
Open this post in threaded view
|

Re: pipe no subprocesso travando

Leonardo Santagada
porque tu não usa multiprocessing?

http://docs.python.org/library/multiprocessing.html

On Aug 24, 2010, at 3:36 PM, Thiago Ribeiro wrote:

> Pessoal estou fazendo uma aplicação python + gtk que conta com subprocesso
> (também python) que vai tratar alguns eventos, já que no windows temos
> grandes problemas com threads.
>
> Bom, a comunicação entre os processos é feita pelo subprocess.pipe e
> coloquei um watch para verificar quando há algo para ler, só que quando dou
> o read a aplicação trava, não consegue ler.
>
> Segue o código abaixo:
>
> def execute(self,std,cb_condition):
>        if cb_condition == gobject.IO_IN:
>            print "passei aqui"
>
>            msg = std.read(1)
>
>            print "mas não aqui"
>            print "--> "+msg
>
>            return True
>
> gobject.io_add_watch(sys.stdin,gobject.IO_IN | gobject.IO_HUP,execute)
>
> Alguém tem alguma idéia?
>
> Thiago.
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ,-----------------------------------------------------------.
> | Antes de enviar um e-mail para o grupo leia:              |
> | http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
> | E se você é usuário do BOL lembre-se de cadastrar o       |
> | e-mail do grupo na lista branca do seu sistema anti-spam. |
> `-----------------------------------------------------------´Links do Yahoo! Grupos
>
>

--
Leonardo Santagada
santagada at gmail.com



Reply | Threaded
Open this post in threaded view
|

Re: pipe no subprocesso travando

Thiago Ribeiro-4
Simplesmente porque não achei nada a respeito.
Achei muito interessante, acho que se encaixa exatamente com o que quero
fazer.

Cheguei a fazer a comunicação por socket, mas a solução não fica tão
elegante...

Obrigado,
Thiago

2010/8/24 Leonardo Santagada <[hidden email]>

>
>
> porque tu não usa multiprocessing?
>
> http://docs.python.org/library/multiprocessing.html
>
>
> On Aug 24, 2010, at 3:36 PM, Thiago Ribeiro wrote:
>
> > Pessoal estou fazendo uma aplicação python + gtk que conta com
> subprocesso
> > (também python) que vai tratar alguns eventos, já que no windows temos
> > grandes problemas com threads.
> >
> > Bom, a comunicação entre os processos é feita pelo subprocess.pipe e
> > coloquei um watch para verificar quando há algo para ler, só que quando
> dou
> > o read a aplicação trava, não consegue ler.
> >
> > Segue o código abaixo:
> >
> > def execute(self,std,cb_condition):
> > if cb_condition == gobject.IO_IN:
> > print "passei aqui"
> >
> > msg = std.read(1)
> >
> > print "mas não aqui"
> > print "--> "+msg
> >
> > return True
> >
> > gobject.io_add_watch(sys.stdin,gobject.IO_IN | gobject.IO_HUP,execute)
> >
> > Alguém tem alguma idéia?
> >
> > Thiago.
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
> > ------------------------------------
> >
> > ,----------------------------------------------------------.
> > | Antes de enviar um e-mail para o grupo leia: |
> > | http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
> > | E se você é usuário do BOL lembre-se de cadastrar o |
> > | e-mail do grupo na lista branca do seu sistema anti-spam. |
> > `----------------------------------------------------------´Links do
> Yahoo! Grupos
> >
> >
>
> --
> Leonardo Santagada
> santagada at gmail.com
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
| E se você é usuário do BOL lembre-se de cadastrar o       |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
    [hidden email]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Reply | Threaded
Open this post in threaded view
|

Re: pipe no subprocesso travando

Paulo Eduardo Neves-3
In reply to this post by Thiago Ribeiro-4
Problema clássico. Já apanhei muito dele:-)

Dê uma olhada no método "select" na documentação do Python para checar se há
algo para ler nos seus descritores de arquivo.  É uma implementação direta
da função select do Unix.  Só tente ler se o select disser que há dados a
serem lidos.

Outra coisa a ter cuidado é de o processo que você disparou encher o buffer
de output e então congelar a execução.

Em 24 de agosto de 2010 15:36, Thiago Ribeiro <[hidden email]>escreveu:

> Pessoal estou fazendo uma aplicação python + gtk que conta com subprocesso
> (também python) que vai tratar alguns eventos, já que no windows temos
> grandes problemas com threads.
>
> Bom, a comunicação entre os processos é feita pelo subprocess.pipe e
> coloquei um watch para verificar quando há algo para ler, só que quando dou
> o read a aplicação trava, não consegue ler.
>
> Segue o código abaixo:
>
> def execute(self,std,cb_condition):
>        if cb_condition == gobject.IO_IN:
>            print "passei aqui"
>
>            msg = std.read(1)
>
>            print "mas não aqui"
>            print "--> "+msg
>
>            return True
>
> gobject.io_add_watch(sys.stdin,gobject.IO_IN | gobject.IO_HUP,execute)
>
> Alguém tem alguma idéia?
>
> Thiago.
>
>


--
Paulo Eduardo Neves
http://www.mosquito.pro.br


[As partes desta mensagem que não continham texto foram removidas]