Python 中的多处理

1 python multiprocessing

我试图在 Python 3 中以最简单的方式应用多处理,但它在我的笔记本电脑上不起作用。我正在使用Windows。

from multiprocessing import Process

# a dummy function
def f(x):
    print(x)

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

print('Done')
Run Code Online (Sandbox Code Playgroud)

事情并没有像预想的那样结束。相反,我得到了这个错误:

Traceback (most recent call last):
File "C:\Users\Mahdi\anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3437, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-2-46a0e604292b>", line 1, in <module>
runfile('C:/Users/Mahdi/Mahdi Code/test.py', wdir='C:/Users/Mahdi/Mahdi Code')
File "C:\Program Files\JetBrains\PyCharm 2021.2.2\plugins\python\helpers\pydev\_pydev_bundle\pydev_umd.py", line 198, in runfile
pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
File "C:\Program Files\JetBrains\PyCharm 2021.2.2\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/Mahdi/Mahdi Code/test.py", line 25, in <module>
p.start()
File "C:\Users\Mahdi\anaconda3\lib\multiprocessing\process.py", line 121, in start
self._popen = self._Popen(self)
File "C:\Users\Mahdi\anaconda3\lib\multiprocessing\context.py", line 224, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
File "C:\Users\Mahdi\anaconda3\lib\multiprocessing\context.py", line 327, in _Popen
return Popen(process_obj)
File "C:\Users\Mahdi\anaconda3\lib\multiprocessing\popen_spawn_win32.py", line 93, in __init__
reduction.dump(process_obj, to_child)
File "C:\Users\Mahdi\anaconda3\lib\multiprocessing\reduction.py", line 60, in dump
ForkingPickler(file, protocol).dump(obj)
_pickle.PicklingError: Can't pickle <function f at 0x00000218267C3D30>: attribute lookup f on __main__ failed
Done
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\Mahdi\anaconda3\lib\multiprocessing\spawn.py", line 116, in spawn_main
exitcode = _main(fd, parent_sentinel)
File "C:\Users\Mahdi\anaconda3\lib\multiprocessing\spawn.py", line 126, in _main
self = reduction.pickle.load(from_parent)
EOFError: Ran out of input
Run Code Online (Sandbox Code Playgroud)

有人知道这件事吗?

Ahm*_*AEK 5

一些交互式 IDE 不支持多处理,例如 jupyter lab,有一些涉及非标准多处理模块的技巧,但最直接的解决方案是不使用多处理代码的交互式环境,而是在脚本模式下运行 python使用 VsCode 或 Pycharm 或通过终端。(Spyder 也可以工作,但你必须将代码作为脚本运行)