Python多进程:工作函数中while循环无输出
我正在研究Python的多进程模块,但不明白为什么下面的代码根本不打印任何内容。如果没有这个循环,程序就会像预期那样打印出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()
2 个回答
0
你在用IDLE吗?我觉得这可能是问题所在。你写的代码在Linux的命令行下运行没问题(每3秒打印一次'Worker_1')。但是在IDLE里试的时候,它就立刻停止了。这是因为你没有加上p.join()
,导致主进程马上就结束了,从而也停止了工作进程。不过在Linux的命令行下,p.join()
似乎不是那么必要,但我还是建议加上。
不过,就算加上了p.join()
,在IDLE里运行,脚本还是没反应,看不到任何输出。我觉得这是因为IDLE处理输出的方式有点奇怪,它把输出重定向到了idlelib.rpc.RPCProxy。所以,换句话说,如果你在用IDLE,那就是你的问题所在。
2
在我的系统上(Linux上的Python 2.6和2.7),这个功能正常。不过你用的是什么平台呢?在某些平台上(比如Windows),fork
这个操作需要通过创建一个全新的进程来模拟,并且还要进行一些设置。我怀疑有些 stdout
(标准输出)没有传递到子进程。你可以试试:
- 使用 threading 模块。如果你只是想在一个线程中等待某个事件,这个模块就足够了。
- 在一个兼容POSIX的平台上运行你的程序,比如BSD、Linux或Solaris。
- 将输出写入一个文件。