main0
不挂起,但main1
挂起。为什么?我认为把它打包到类中应该是无害的。。。在
子进程只需将接收到的消息发送回主进程。在
Python3代码:
from multiprocessing import Process, Pipe
def child(conn):
print("child started")
while True:
msg = conn.recv()
if msg == "quit":
break
print("child recv:"+msg)
print("child sending:" + msg)
conn.send(msg)
conn.close()
print("child ended")
def main0():
parent_conn, child_conn = Pipe()
p = Process(target=child, args=(child_conn,))
p.start()
parent_conn.send("ping")
print(parent_conn.recv())
parent_conn.send("quit")
print("#parent ended#")
p.join()
class Parent(object):
def __init__(self):
self.parent_conn = None
self.child_conn = None
self.p = None
def start(self):
self.parent_conn, self.child_conn = Pipe()
self.p = Process(target=child, args=(self.child_conn,))
self.p.start() # <--- i initially missed this line
print("started")
def send(self, msg):
print("try to send: " + msg)
self.parent_conn.send(msg)
return self.parent_conn.recv()
def close(self):
self.parent_conn.send("quit")
self.p.join()
def main1():
a = Parent()
a.start()
print(a.send("ping"))
print(a.send("quit"))
a.close()
if __name__ == '__main__':
main0() # doesn't hang
main1() # hangs.
输出:
^{pr2}$
我在start方法中错过了
self.p.start()
行。在同时向子级发送
quit
消息不会返回任何消息。 正确的main1()
应该是:那么这个问题就解决了。在
相关问题 更多 >
编程相关推荐