【发布时间】:2021-11-27 13:35:55
【问题描述】:
我正在尝试使用python documentation 中的multiprocessing.Process 示例启动一个进程。
示例代码如下:
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()
我希望控制台向我显示函数 f('bob') 的输出,但我只能看到 info('mainline') 的输出。
所以我认为这个过程甚至还没有开始??
我以前从未使用过多处理,我敢打赌这是我犯的一个愚蠢的错误。
我也尝试过设置启动方法multiprocessing.set_start_method('spawn')(见here),因为'spawn'似乎是windows唯一有效的方法。
但我只得到一个
RuntimeError: context has already been set
目前我认为,我无法启动该过程。
任何想法如何解决这个问题?
附:我正在使用 spyder 4.2.5 中的 Windows 10(也许这与 ipython 控制台有关?因为我听说过,这不是普通的 python 控制台)。
但是我在普通的python shell中也试过同样的例子,它也只显示了info('mainline')的输出。
【问题讨论】:
-
不是您问题的真正答案,但如果使用多处理,则可能值得使用标准控制台来运行 Python。几年前我会使用 IDLE,但我认为它并不特别喜欢线程/进程。
-
您的代码使用标准 CPython 解释器 (v 3.8.9) 在 Windows10 上为我工作。
-
@Peter:是的,你是对的,当我从 cmd 运行脚本时,它可以工作。所以我想这真的是 spyder/ipython 的东西。感谢您的提示! :)
标签: python multiprocessing ipython spyder