【发布时间】:2020-01-20 17:43:17
【问题描述】:
在下面的简单 Python 3 示例中,我们使用 multiproessing 模块来处理列表 friends,是什么导致了错误:
TypeError: new() 缺少 1 个必需的位置参数:'name'
简单运行不会出错
tom = Friend(tom)
say_hello(tom)
有什么想法可以解决这个问题吗?谢谢!
代码
import multiprocessing
def say_hello(friend):
print('Hello', friend.name, '!')
class Friend:
friends = {}
def __new__(cls, name):
if name not in cls.friends:
cls.friends[name] = super(Friend, cls).__new__(cls)
return cls.friends[name]
def __init__(self, name):
self.name = name
jack = Friend('jack')
ryan = Friend('ryan')
friends = [jack, ryan]
multiprocessing.Pool(2).map(say_hello, friends)
完整的错误跟踪
Traceback (most recent call last):
File "/Users/nyxynyx/opt/anaconda3/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
self.run()
File "/Users/nyxynyx/opt/anaconda3/lib/python3.7/multiprocessing/process.py", line 99, in run
self._target(*self._args, **self._kwargs)
File "/Users/nyxynyx/opt/anaconda3/lib/python3.7/multiprocessing/pool.py", line 110, in worker
task = get()
File "/Users/nyxynyx/opt/anaconda3/lib/python3.7/multiprocessing/queues.py", line 354, in get
return _ForkingPickler.loads(res)
TypeError: __new__() missing 1 required positional argument: 'name'
【问题讨论】:
-
@Darkonaut 感谢您接受这个。更新了原始问题。
标签: python python-3.x multiprocessing python-multiprocessing