Python多进程:工作函数中while循环无输出

5 投票
2 回答
2107 浏览
提问于 2025-04-16 08:02

我正在研究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。
  • 将输出写入一个文件。

撰写回答