我正在探索Python多处理模块,并且不明白为什么以下代码根本不打印任何内容。如果没有while循环,程序将按预期打印Worker_1。
import multiprocessing, time
def worker1():
print 'Worker_1'
while 1:
print 'Worker_1'
time.sleep(3)
return
if __name__ == '__main__':
jobs = []
p = multiprocessing.Process(target=worker1)
jobs.append(p)
p.start()
答案 0 :(得分:2)
在我的系统上(Linux上的Python 2.6和2.7),这可以按预期工作。你在哪个平台上使用?在某些平台(Windows)上,fork
可以通过创建一个全新的流程并进行设置来模拟。我怀疑某些stdout
未转移到子进程。尝试:
答案 1 :(得分:0)
你在使用IDLE吗?我认为这是问题所在。从命令行调用时,您在Linux中为我工作的代码(它每3秒打印一次“Worker_1”)。当我在IDLE中尝试时,它会立即停止。这是因为您没有p.join()
,导致主进程立即停止,然后停止工作进程。显然,p.join()
并不是Linux中命令行所必需的,但无论如何我都会推荐它。
但是,即使使用p.join()
并使用IDLE,脚本也只是坐在那里,我们看不到任何文字。我认为这是因为IDLE将stdout重新路由到idlelib.rpc.RPCProxy的奇怪方式。所以,换句话说,如果你使用IDLE,那就是你的问题。