Python多处理示例什么都不做

时间:2018-02-14 12:10:48

标签: python python-3.x multiprocessing

我正在尝试学习python多处理,但是当我尝试从文档中运行以下示例代码时,没有任何反应。什么都没有打印,没有例外,没有。

from multiprocessing import Process

def f(name):
    print('hello', name)

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

然而,另一个例子正如预期的那样工作:

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

我已经检查过它是否是一个环境特定的问题,现在我更加困惑。如果我运行我在IDLE中展示的第一个例子,它就不起作用了。如果我在命令提示符下的交互式解释器中运行它,它也不起作用。但是,如果我使用命令提示符运行具有相同代码的.py文件,则它可以正常工作。有没有人知道实际发生了什么以及为什么运行相同的代码会产生不同的结果?

(我目前在Windows 10机器上,如果这很重要)

1 个答案:

答案 0 :(得分:2)

由于替换sys.stdout和公司,IDLE有异常奇怪的行为;无论是否互动,你最终都会遇到一些奇怪的行为。

multiprocessing通常在交互式解释器中不能很好地工作,特别是在Windows上,“fork模拟”无法真正模拟它。

坚持在实际脚本中测试multiprocessing相关内容。