Python multiprocessing.Pool 工作人员保持空闲状态
Posted
技术标签:
【中文标题】Python multiprocessing.Pool 工作人员保持空闲状态【英文标题】:Python multiprocessing.Pool workers remain idle 【发布时间】:2021-08-17 23:58:17 【问题描述】:我是 Python 的初学者。我正在尝试使用 multiprocessing.Pool 运行一个简单的函数,但是当我运行该程序时,它没有得到处理。我可以看到产生了不同的进程,但它们remain idle。例如,下面的代码确实生成了两个工作进程,但没有输出,没有别的:
import multiprocessing
def f(x):
print("Process "+str(x))
return True
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=2)
result = pool.map(f, range(1000))
我正在使用 Microsoft Visual Studio 2019 运行 Python 3.9。操作系统是 Windows 10。我在这台计算机上使用 Python 3.7 时遇到了同样的问题。我在另一台计算机(也是 Windows 10、VS2019)上尝试了相同的代码,它工作正常。不同的是,这个有i9 Processor,而另一个有i7。
我在网上搜索过,但我没有遇到任何类似的问题或任何解决我的问题的方法。有谁知道为什么会发生这种情况和/或可能的修复?处理器的类型可能与它有关吗?谢谢!
【问题讨论】:
当且仅当您的问题与 Visual Studio 直接相关时,请使用标签visual-studio
【参考方案1】:
这只是一个猜测:
我知道这不会在 Jupyter Notebook 或交互式解释器下运行。请参阅multiprocessing docs,尤其是以下部分:
针对这些环境的解决方案是将您的工作函数 f
放在一个单独的模块中,例如 worker.py,然后导入工作函数:
import multiprocessing
from worker import f
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=2)
result = pool.map(f, range(1000))
试一试,让我们知道其他也有 Visual Studio 的人是否可以这样做。谢谢。
【讨论】:
感谢@Booboo 的回答!我尝试了您的解决方案,但没有奏效。相反,我采取了更激进的方法,决定重新安装 python 以及所有其他包。令人惊讶的是,它奏效了!因此,令人尴尬的是,该问题很可能与我在第一次安装时忽略的一些缺失依赖项有关(尽管事后我无法准确指出 wat 缺失)。结案!很抱歉浪费您的时间:( 那你为什么要接受我的回答?你应该不接受它。以上是关于Python multiprocessing.Pool 工作人员保持空闲状态的主要内容,如果未能解决你的问题,请参考以下文章