我正在尝试学习 python 多重处理,但是当我尝试运行文档中的以下示例代码时,没有任何反应。没有打印任何内容,没有异常(exception),什么也没有。
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 计算机)
最佳答案
由于替换了sys.stdout
和company,IDLE有异常奇怪的行为;无论是否交互,您最终都会出现一些奇怪的行为。
多处理
通常在交互式解释器中不能很好地工作,特别是在 Windows 上,“fork 模拟”无法真正正确地模拟它。
坚持在实际脚本中测试与多处理相关的内容。
关于Python 多处理示例不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48786923/