No multiprocessing print outputs (Spyder)
我最近开始研究多处理,因为我相信我的代码可以很容易地并行化。但是,在学习这些教程时,我遇到了一个问题:似乎无法打印分布在池中的函数。
这是罪魁祸首:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | __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() |
我收到的输出如下:
1 2 3 4 | main line module name: __main__ parent process: 10812 process id: 11348* |
现在很明显,控制台似乎只显示info函数,而不显示f函数的任何输出(正在使用multiprocessing.Process)。我在网上找到的其他示例也遇到了类似的问题:使用多重处理时,计算已完成并正确返回,但是打印内容永远不会显示在控制台中。
有谁知道为什么,以及如何解决这个问题?
可能相关的注释是,我在Spyder 3.2.4中使用Python 3.6。 Spyder似乎有一些古怪之处,因为代码的第一行已经是解决问题的方法,它允许多处理工作,这是我在这里已经讨论的一个问题。这里提到了一个类似的未解决的问题。
我将不胜感激,也祝大家新年快乐。
(这里是Spyder的维护者)在Windows的Spyder的IPython控制台中,多处理效果不佳。 但是,您可以在外部终端中运行代码以获得所需的结果。
为此,请转到
您可以通过将该函数另存为其他.py文件并将其导入到正在运行的脚本中,从而通过Spyders的IPython控制台运行它。 例如,保存:
1 2 3 | def f(name): info('function f') print('hello', name) |
在一个名为worker.py的文件中。 然后在您的主文件中,执行以下操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from multiprocessing import Process import os import worker def info(title): print(title) print('module name:', __name__) print('parent process:', os.getppid()) print('process id:', os.getpid()) if __name__ == '__main__': info('main line') p = Process(target=worker.f, args=('bob',)) p.start() p.join() |
您可以改用日志文件。 使用fp.write()