Python多处理:在worker函数中没有带while循环的输出

时间:2010-12-04 21:19:00

标签: python

我正在探索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()

2 个答案:

答案 0 :(得分:2)

在我的系统上(Linux上的Python 2.6和2.7),这可以按预期工作。你在哪个平台上使用?在某些平台(Windows)上,fork可以通过创建一个全新的流程并进行设置来模拟。我怀疑某些stdout未转移到子进程。尝试:

  • threading模块。如果您只想等待线程中的事件就足够了。
  • 在兼容POSIX的平台上运行程序,例如BSD,Linux或Solaris
  • 输出到文件

答案 1 :(得分:0)

你在使用IDLE吗?我认为这是问题所在。从命令行调用时,您在Linux中为我工作的代码(它每3秒打印一次“Worker_1”)。当我在IDLE中尝试时,它会立即停止。这是因为您没有p.join(),导致主进程立即停止,然后停止工作进程。显然,p.join()并不是Linux中命令行所必需的,但无论如何我都会推荐它。

但是,即使使用p.join()并使用IDLE,脚本也只是坐在那里,我们看不到任何文字。我认为这是因为IDLE将stdout重新路由到idlelib.rpc.RPCProxy的奇怪方式。所以,换句话说,如果你使用IDLE,那就是你的问题。