簡體   English   中英

在multiprocessing.Array中表示任意元素類型時發生TypeError

[英]TypeError while representing arbitrary element type in multiprocessing.Array

>>> 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])]

以下是python多重處理示例:def test_sharedvalues():我正在嘗試使用以下代碼創建共享的Proxy對象:

shared_a = [multiprocessing.Array(id, e) for id, e in a]

但這給我一個錯誤

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

好。 問題已經解決了

我變了

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

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

這解決了TypeError。

實際上,我還發現我不必一定要在range(3)內使用i作為計數(因為Array自動允許索引),所以'i'是multiprocessing.sharedctypes下的c_int類型代碼

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM