Dus*_*rea 5 python pool multiprocessing
如果我在Python解释器中创建一个具有令人无法接受的大量进程的池,它显然会出现错误,但是在执行此操作之前看起来似乎没有清除分叉进程,因此会使环境变脏,并且系统的其余部分无法分叉进程.
>>> from multiprocessing import Pool
>>> p = Pool(1000)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/__init__.py", line 232, in Pool
return Pool(processes, initializer, initargs, maxtasksperchild)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 159, in __init__
self._repopulate_pool()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 222, in _repopulate_pool
w.start()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 130, in start
self._popen = Popen(self)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/forking.py", line 121, in __init__
self.pid = os.fork()
OSError: [Errno 35] Resource temporarily unavailable
>>> p = Pool(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/__init__.py", line 232, in Pool
return Pool(processes, initializer, initargs, maxtasksperchild)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 159, in __init__
self._repopulate_pool()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 222, in _repopulate_pool
w.start()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 130, in start
self._popen = Popen(self)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/forking.py", line 121, in __init__
self.pid = os.fork()
OSError: [Errno 35] Resource temporarily unavailable
Run Code Online (Sandbox Code Playgroud)
有没有办法避免/补救这个,还是被认为是一个错误?
有什么方法可以避免/补救这种情况吗?
不要那样做。
或者它被认为是一个错误?
是的,如果初始化器失败,所有分配的资源都应该被取消分配。您应该检查您正在使用的特定版本 2.7,并查看后续版本中是否修复了任何特定于多处理的库错误(2.7.6 发行说明:http ://hg.python.org/cpython/raw-file /99d03261c1ba/Misc/新闻)。
根据堆栈跟踪中的路径,我假设您的平台是 OSX。这是一篇关于分叉时出现 errno 35(在 OSX 中似乎是 EAGAIN)的帖子 -我无法运行超过 100 个进程
无论您想要实现什么目标,似乎都需要在应用程序级别限制资源使用。这意味着您可能需要重新考虑您的解决方案。使用您当前的解决方案并修复错误后,您仍然可能会在其他上下文中看到系统范围内的资源限制。
归档时间: |
|
查看次数: |
6857 次 |
最近记录: |