Python 在多处理数组中表示任意元素类型时出现TypeError

Python 在多处理数组中表示任意元素类型时出现TypeError,python,arrays,multiprocessing,typeerror,Python,Arrays,Multiprocessing,Typeerror,在python多处理之后,我尝试使用以下代码创建一个共享代理对象: >>> from multiprocessing import Array, Value >>> import numpy as np >>> a = [(i,[]) for i in range(3)] >>> a [(0, []), (1, []), (2, [])] >>> a[0][1].extend(np.array([1,2,3

在python多处理之后,我尝试使用以下代码创建一个共享代理对象:

>>> from multiprocessing import Array, Value
>>> import numpy as np
>>> a = [(i,[]) for i in range(3)]
>>> a
[(0, []), (1, []), (2, [])]
>>> a[0][1].extend(np.array([1,2,3]))
>>> a[1][1].extend(np.array([4,5]))
>>> a[2][1].extend(np.array([6,7,8]))
>>> a
[(0, [1, 2, 3]), (1, [4, 5]), (2, [6, 7, 8])]
但这给了我一个错误

shared_a = [multiprocessing.Array(id, e) for id, e in a]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib64/python2.6/multiprocessing/_init__uuu.py”,第255行,在数组中
返回数组(类型代码或类型、大小或初始值设定项,**kwds)
文件“/usr/lib64/python2.6/multiprocessing/sharedtypes.py”,第87行,在数组中
obj=RAWARY(类型代码或类型、大小或初始值设定项)
文件“/usr/lib64/python2.6/multiprocessing/sharedtypes.py”,第60行,在数组中
结果=\新\值(类型\)
文件“/usr/lib64/python2.6/multiprocessing/sharedtypes.py”,第36行,在新值中
大小=ctypes.sizeof(类型)
TypeError:此类型没有大小

好的。问题解决了

我变了

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/multiprocessing/__init__.py", line 255, in Array
    return Array(typecode_or_type, size_or_initializer, **kwds)
  File "/usr/lib64/python2.6/multiprocessing/sharedctypes.py", line 87, in Array
    obj = RawArray(typecode_or_type, size_or_initializer)
  File "/usr/lib64/python2.6/multiprocessing/sharedctypes.py", line 60, in RawArray
    result = _new_value(type_)
  File "/usr/lib64/python2.6/multiprocessing/sharedctypes.py", line 36, in _new_value
    size = ctypes.sizeof(type_)
TypeError: this type has no size

这就解决了打字错误

事实上,我还发现我不一定要在范围(3)内使用I作为计数(因为数组自动允许索引),“I”表示multiprocessing.sharedtypes下的c_int类型代码

希望这有帮助

>>> a = [(i,[]) for i in range(3)]
>>> a = [('i',[]) for i in range(3)]