这适用于 Python 3.2.2。我只是在学习 Python 和多处理是如何工作的,这个简单的例子让我很吃惊:
from multiprocessing import Pipe, Process
def f(r):
print(r.recv())
if __name__ == '__main__':
q, r = Pipe()
p = Process(target=f, args=(r,))
p.start()
q.send([42, None, 'hello'])
p.join()
主线程创建一个新Process
的p
, 并发送r
一个双向连接对象给 function f()
。当进程p
启动时,我希望r.recv()
阻塞(据我所知,这意味着这个进程将无限期地等待,直到有东西通过管道),直到主进程通过 with 发送一些对象q.send
。
然后p.join()
应该让主进程等到p
运行它的过程。
但是什么都没有发生。如果我向 中添加一条print
语句f()
,那里也不会发生任何事情,就好像f()
从来没有运行过并且p.start()
没有功能一样。
您能解释一下为什么这不起作用以及可以解决的问题吗?