2

几天来,我一直在研究 Python 中的多处理模块。

但是,我遇到了一个我无法解决的奇怪问题。

源代码非常简单,但运行此代码后我无法得到任何结果。

代码如下:

import multiprocessing as multi

def worker():
    print "Worker!!!"
    return

jobs = []

for i in range(5):
    p = multi.Process(target = worker)
    jobs.append(p)
    p.start()

我期待得到五次打印“工人!!!”。

然而,我唯一拥有的是

* 远程解释器重新初始化 *

>>>>"

>>>>"

有没有人有想法解决这个问题?

请帮帮我!!!

4

1 回答 1

1

根据multiprocessing documentation

笔记

此包中的功能要求 __main__ 模块可由子模块导入。这在编程指南中有介绍,但值得在这里指出。这意味着某些示例,例如 multiprocessing.Pool 示例将无法在交互式解释器中工作

...

安全导入主模块

确保新的 Python 解释器可以安全地导入主模块,而不会导致意外的副作用(例如启动新进程)。

...

应该使用if __name__ == '__main__'来保护程序的“入口点”

所以你的程序应该如下所示:

import multiprocessing as multi

def worker():
    print "Worker!!!"

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = multi.Process(target = worker)
        jobs.append(p)
        p.start()
    for job in jobs:
        job.join()
于 2013-09-13T03:10:21.180 回答