2010-05-14 6 views
3

Je rencontre des problèmes pour que Pipe.send fonctionne dans ce code. Ce que je voudrais finalement faire est d'envoyer et de recevoir des messages vers et à partir du processus étranger pendant qu'il s'exécute dans une fourchette. Cela va finalement être intégré dans une boucle pexpect pour parler aux processus d'interprétation.Envoyer et recevoir async sur multiprocessing.Pipe() en Python

from multiprocessing import Process, Pipe 
from pexpect import spawn 


class CockProc(Process): 

    def start(self): 
     self.process = spawn('coqtop', ['-emacs-U']) 

    def run(self, conn): 
     while True: 
      if not conn.poll(): 
       cmd = conn.recv() 
       self.process.send(cmd) 
      self.process.expect('\<\/prompt\>') 
      result = self.process.before + self.process.after + " " 
      conn.send(result) 


q, p = Pipe() 

proc = CockProc() 
proc.start() 
proc.run(p) 
res = q.recv() 
command = raw_input(res + " ") 

q.send(command) 
res = q.recv() 
parent_conn.send('OHHAI') 
p.join() 
    ` 

Répondre

1

Cela fonctionne, mais pourrait avoir besoin de plus de travail. Je ne sais pas combien de ces je peux créer et faire une boucle.

from multiprocessing import Process, Pipe 
from pexpect import spawn 


class CockProc(Process): 

    def start(self): 
     self.process = spawn('coqtop', ['-emacs-U']) 

    def run(self, conn): 
     if conn.poll(): 
      cmd = conn.recv() 
      self.process.send(cmd + "\n") 
      print "sent comm" 
     self.process.expect('\<\/prompt\>') 
     result = self.process.before + self.process.after + " " 
     conn.send(result) 

here, there = Pipe(duplex=True) 

proc = CockProc() 
proc.start() 
proc.run(there) 

while True: 
    if here.poll(): 
     res = here.recv() 
     command = raw_input(res + " ") 
     here.send(command) 
    proc.run(there) 
+0

+1 merci j'avais cette même question, je me suis accroché sur .poll() – John

Questions connexes