我试图利用多处理组绘制一些不可变物体的纯功能图。 然而,在我尝试和操作时,我看到终点站有吨的错误(有时长达几分钟),而且通常情况下,花on不得不以不寻常的方式终止。 I m 运行在Windows(XP),使用Python 3.2.2.
import multiprocessing
def do_stuff(v):
return v.x + v.y
class Vector:
__slots__ = [ x , y ]
def __setattr__(self, name, value):
raise AttributeError("Cannot assign values to object {0} of type {1}".format(self, type(self)))
def __init__(self, x, y = None):
"""Initialize an immutable x, y Vector"""
object.__setattr__(self, x , x)
object.__setattr__(self, y , y)
if __name__ == "__main__":
todo = [Vector(1, 2), Vector(3, 4), Vector(-1, 12), Vector(16, 32), Vector(16, 32)]
pool = multiprocessing.Pool(4)
results = list(pool.map(do_stuff, todo))
print(results)
预期产出:
[3, 7, 11, 48, 48]
错误数目非常大,但似乎在集合中消失。 • 绘制图,试图把属性定在一位卫士上:
Process PoolWorker-1:
Traceback (most recent call last):
File "c:Python32libmultiprocessingprocess.py", line 267, in _bootstrap
Process PoolWorker-2:
Traceback (most recent call last):
File "c:Python32libmultiprocessingprocess.py", line 267, in _bootstrap
self.run()
File "c:Python32libmultiprocessingprocess.py", line 116, in run
self._target(*self._args, **self._kwargs)
File "c:Python32libmultiprocessingpool.py", line 102, in worker
task = get()
File "c:Python32libmultiprocessingqueues.py", line 378, in get
return recv()
File "d:Documents and SettingsUserdirScripts emp est.py", line 11, in __s
etattr__
raise AttributeError("Cannot assign values to object {0} of type {1}".format
(self, type(self)))
AttributeError: Cannot assign values to object <__main__.Vector object at 0x00C2
BBB0> of type <class __main__.Vector >
我可以评论从<代码>__slots__ (strange?)开始的行文,使用一个固定的<代码><>>>>>/代码,或者我能够使Verctor阶层的 mu变(制定setattr__
),而其中任何一个人将自己造成工作罚款。
www.un.org/spanish/ecosoc 当我从物体读到时,为什么会试图把属性定在我的物体上?
www.un.org/spanish/ecosoc 为什么删除<代码>__slots__ ∗∗∗∗
EDIT:
我正在使用<代码>__slots__,作为保存记忆/空间的一种方式,因为我的节目中通常有大量的病媒。 因此,我无法从图中得出以下结论: