Jupyter Notebook 多处理代码不起作用

Pin*_*nar 4 python multiprocessing jupyter-notebook

我是 python 新手,我有 Anaconda Pyton 3.9\n我正在研究多处理。

\n

当我尝试这段代码时

\n
from multiprocessing import Process # gerekli k\xc3\xbct\xc3\xbcphaneyi \xc3\xa7a\xc4\x9f\xc4\xb1raca\xc4\x9f\xc4\xb1z.\n\nimport time\n\ndef subfunc1():\n    time.sleep(2)\n    print("subfunc1: Baslatildi")\n    time.sleep(2)\n    print("subfunc1: Sonlandi")\n    time.sleep(2)\n\ndef subfunc2():\n    time.sleep(2)\n    print("subfunc2: Baslatildi")\n    time.sleep(2)\n    print("subfunc2: Sonlandi")\n    time.sleep(2)\n    \ndef mainfunc():\n    print("mainfunc: Baslatildi")\n    pr1 = Process(target=subfunc1)\n    pr2 = Process(target=subfunc2)\n    pr1.start()\n    pr2.start()\n    print("mainfunc: Sonlandi")\n    \nif __name__ == '__main__': # Main kod blo\xc4\x9funun i\xc3\xa7erisindeyken main fonk \xc3\xa7a\xc4\x9f\xc4\xb1r!\n    mainfunc()\n\nresult is\n\n    mainfunc: Baslatildi\n    mainfunc: Sonlandi\n
Run Code Online (Sandbox Code Playgroud)\n

当我将 Visual Code 与 Python 3.9 结合使用时,我有一个虚拟环境并且代码可以工作!\nVisual Code 在虚拟环境中使用 Anaconda 的 python 3.9!

\n

请你帮助我好吗?为什么这段代码在 Jupyter Notebook 中无法正常工作?

\n

谢谢

\n

Rol*_*ith 5

我假设您在 ms-windows 或 macOS 上运行这个程序是否正确?

在这种情况下,multiprocessing它将无法在 IPython 等交互式解释器中工作。文档中对此进行了介绍,请参阅“注释”:

此包中的功能要求该__main__模块可由子级导入。编程指南中对此进行了介绍,但值得在此指出。这意味着某些示例(例如multiprocessing.pool.Pool示例)将无法在交互式解释器中运行。

这是由这些操作系统上使用的spawn 启动方法引起的。

一种可能的解决方法是将代码保存在脚本中,并确保创建multiprocessing对象是在__main__-block 内完成的。另一个是下面亚伦的评论

  • 作为此答案的补充,只要目标函数是从可导入的外部 .py 文件导入的,Jupyter 就可以使用多重处理。它不能在笔记本文件中定义。有许多第三方库试图使 jupyter 中的多重处理工作得更好,例如“multiprocess”(缺少 -ing),它使用“dill”而不是“pickle”将目标函数以及进程对象发送到新实例。 (2认同)