python - 错误组参数现在在 multiprocessing.pool 中必须为 None
问题描述
下面是我的python脚本。
import multiprocessing
# We must import this explicitly, it is not imported by the top-level
# multiprocessing module.
import multiprocessing.pool
import time
from random import randint
class NoDaemonProcess(multiprocessing.Process):
# make 'daemon' attribute always return False
def _get_daemon(self):
return False
def _set_daemon(self, value):
pass
daemon = property(_get_daemon, _set_daemon)
# We sub-class multiprocessing.pool.Pool instead of multiprocessing.Pool
# because the latter is only a wrapper function, not a proper class.
class MyPool(multiprocessing.pool.Pool):
Process = NoDaemonProcess
def sleepawhile(t):
print("Sleeping %i seconds..." % t)
time.sleep(t)
return t
def work(num_procs):
print("Creating %i (daemon) workers and jobs in child." % num_procs)
pool = multiprocessing.Pool(num_procs)
result = pool.map(sleepawhile,
[randint(1, 5) for x in range(num_procs)])
# The following is not really needed, since the (daemon) workers of the
# child's pool are killed when the child is terminated, but it's good
# practice to cleanup after ourselves anyway.
pool.close()
pool.join()
return result
def test():
print("Creating 5 (non-daemon) workers and jobs in main process.")
pool = MyPool(20)
result = pool.map(work, [randint(1, 5) for x in range(5)])
pool.close()
pool.join()
print(result)
if __name__ == '__main__':
test()
这是在 ubuntu 服务器上运行的,我使用的是 python 3.6.7
apt-get upgrade 后我让这个工作正常我收到错误
group argument must be None for now
我面临的错误可能是什么。我应该更改python版本吗?我应该在升级后回滚更改吗?
编辑 1
堆栈跟踪异常:-
Traceback (most recent call last):
File "/src/mainapp.py", line 104, in bulkfun
p = MyPool(20)
File "/usr/lib/python3.6/multiprocessing/pool.py", line 175, in __init__
self._repopulate_pool()
File "/usr/lib/python3.6/multiprocessing/pool.py", line 236, in _repopulate_pool
self._wrap_exception)
File "/usr/lib/python3.6/multiprocessing/pool.py", line 250, in _repopulate_pool_static
wrap_exception)
File "/usr/lib/python3.6/multiprocessing/process.py", line 73, in __init__
assert group is None, 'group argument must be None for now'
AssertionError: group argument must be None for now
编辑 2
该代码适用于 python2.7,python3.5 但如果我使用 python 3.6.7 运行,我会收到如下错误。
Creating 5 (non-daemon) workers and jobs in main process.
Traceback (most recent call last):
File "multi.py", line 52, in <module>
test()
File "multi.py", line 43, in test
pool = MyPool(5)
File "/usr/lib/python3.6/multiprocessing/pool.py", line 175, in __init__
self._repopulate_pool()
File "/usr/lib/python3.6/multiprocessing/pool.py", line 236, in _repopulate_pool
self._wrap_exception)
File "/usr/lib/python3.6/multiprocessing/pool.py", line 250, in _repopulate_pool_static
wrap_exception)
File "/usr/lib/python3.6/multiprocessing/process.py", line 73, in __init__
assert group is None, 'group argument must be None for now'
AssertionError: group argument must be None for now
解决方案
我在将 Travis 发行版从 14.04 升级到 16.04 时遇到了这个问题,python 3.6 开始失败。我找到了解决这个问题的方法,因为它是对另一个包的修复 -修复:Python 2.7-3.7.1 compatible NonDaemonPool
class NonDaemonPool(multiprocessing.pool.Pool):
def Process(self, *args, **kwds):
proc = super(NonDaemonPool, self).Process(*args, **kwds)
class NonDaemonProcess(proc.__class__):
"""Monkey-patch process to ensure it is never daemonized"""
@property
def daemon(self):
return False
@daemon.setter
def daemon(self, val):
pass
proc.__class__ = NonDaemonProcess
return proc
推荐阅读
- sql - sql-server 2008 r2 连接两个字符串
- android - 使用 ViewPager 添加时 Tablayout 项目消失
- java - 如何从 Android Room 中的多个数据库中进行选择(如何附加数据库)
- python - 当我尝试启动 celery/supervisor 实例时出现“错误(生成错误)”
- reactjs - 反应 axios 获取方法
- abap - 计算内部表中的重复项?
- python-3.x - 尝试在 Python 中通信时出错
- python - 蟒蛇在我的字母猜谜游戏中遇到困难
- html - 如何以角度更改特定垫表列条目的字体颜色?
- javascript - 如何在 reactjs 中访问 componentWillMount() 中的变量值