我最近开始研究多处理,因为我相信我的代码可以很容易地并行化。但是,在完成教程后,我遇到了一个问题:分布在池中的函数似乎无法打印。
这是罪魁祸首:
__spec__ = None # This line is required for Spyder and not part of the actual example
from multiprocessing import Process
import os
def info(title):
print(title)
print('module name:', __name__)
print('parent process:', os.getppid())
print('process id:', os.getpid())
def f(name):
info('function f')
print('hello', name)
if __name__ == '__main__':
info('main line')
p = Process(target=f, args=('bob',))
p.start()
p.join()
我收到的输出如下:
main line
module name: __main__
parent process: 10812
process id: 11348*
现在很明显,控制台似乎只打印 info 函数,而不是 f 函数(使用 multiprocessing.Process)的任何输出。我在网上找到的其他示例也遇到过类似问题:使用多处理时计算已完成并正确返回,但打印件从未显示在控制台中。
有谁知道为什么,以及如何解决这个问题?
在可能相关的注释中,我在 Spyder 3.2.4 中使用 Python 3.6。 Spyder 似乎有一些怪癖,因为代码中的第一行已经是允许多处理工作所需的解决方法,我发现这个问题已经在 这里 讨论过了。 这里 提到了一个类似的、未解决的问题。
我将不胜感激任何帮助,并祝大家新年快乐。
原文由 J.Galt 发布,翻译遵循 CC BY-SA 4.0 许可协议
( _此处为 Spyder 维护者_)在 Spyder 的 IPython 控制台中,多处理在 Windows 上运行不佳。但是,您可以在外部终端中运行代码以获得所需的结果。
为此,请访问
Run > Configuration per file > Execute in an external system terminal
。_更新_:自我们的 5.2.0 版本(2021 年 11 月发布)以来,运行时生成的打印件
multiprocessing
代码被捕获并显示在所有操作系统的 IPython 控制台中。