Python multiprocessing.Pool()发出错误

时间:2019-07-05 08:47:51

标签: python python-2.7 parallel-processing python-multiprocessing failed-installation

我正在使用python 2.7.14,并且需要在多个进程中产生一个方法。 我尝试使用多重处理:

from multiprocessing import Pool
pool = Pool()

这会产生以下错误:

File "sw\lib\multiprocessing\__init__.py", line 232, in Pool
return Pool(processes, initializer, initargs, maxtasksperchild)
File "sw\lib\multiprocessing\pool.py", line 61, in __init__
self._repopulate_pool()
File "sw\lib\multiprocessing\pool.py", line 25, in _repopulate_pool
w.start()
File "sw\lib\multiprocessing\process.py", line 130, in start
self._popen = Popen(self)
File "sw\lib\multiprocessing\forking.py", line 272, in __init__
prep_data = get_preparation_data(process_obj._name)
File "<console>", line 2, in _get_preparation_data
File "sw\lib\multiprocessing\forking.py", line 409, in get_preparation_data
not d['sys_argv'][0].lower().endswith('pythonservice.exe'):
IndexError: list index out of range

这是python 2.7的错误吗?

python中是否有用于多处理的替代方法?

3 个答案:

答案 0 :(得分:0)

我可以在python 2.7.14的多处理中使用Pool。 您能在conda环境中尝试创建相同内容,看看是否可行

conda create -n test2.7 python=2.7.14
source activate test2.7

现在打开python shell,看看它是否有效

from multiprocessing import Pool
pool = Pool()

答案 1 :(得分:0)

  

问:这是python 2.7的错误吗?
答:否,这不是错误,
很有可能localhost安装状态已损坏

观察:

您的py2.7 被测系统(SuT):
失败/执行错误:由于SuT无法找到 {{ 1}} 文件在 pythonservice.exe 实例化期间。没有此类文件的Pool()系统无法继续进行上述操作并抛出Exc:

localhost

标准py2.7 SuT
通过

File "sw\lib\multiprocessing\forking.py", line 409, in get_preparation_data
      not d['sys_argv'][0].lower().endswith('pythonservice.exe'):
IndexError: list index out of range

评估:

Python 2.7解释器能够执行MCVE代码,而不会产生任何警告和/或错误。该问题是特定于your-py2.7-SuT的,一般而言无法再现,并且观察结果表明您的py2.7-SuT存在缺陷,很可能是由于python生态系统安装状态损坏(EXC报告缺少某些文件,否则,这样的生态系统就可以被假设永远存在。

Q.E.D。

  

问:python中是否有用于多处理的替代方法?

正确的步骤是修复Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from multiprocessing import Pool >>> pool = Pool() >>> python安装(通过完全重新安装),因为它表明它已损坏。

强烈建议使用任何现代程序包管理框架(mini-conda,conda等),以确保使用正确的配置管理和版本控制工具来防止新安装的版本不兼容以及重新出现任何类似的不良副作用。

答案 2 :(得分:0)

我以前曾在Anaconda安装python时遇到这样的库丢失问题。建议重新安装Anaconda,以便重新安装缺少的软件包。

PoolLockSemaphore是多处理器的包装程序,它们实际上包装进程以控制CPU使用率,RAM和计算机的其他容量。您可以查看有关如何使用它的文章https://realpython.com/intro-to-python-threading/