ТипError, представляющий произвольный тип элемента при многопроцессорной обработке.

94
7

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

спросил(а) 2013-12-09T23:52:00+04:00 6 лет, 7 месяцев назад
1
Решение
93

ОК. Проблема решена

Я изменился

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

в

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

и это решило TypeError.

На самом деле, я также выяснил, что мне не обязательно было использовать я как счетчик в пределах диапазона (3) (поскольку Array автоматически разрешает индексирование), "i" для c_int typecode при многопроцессорности.sharedctypes

Надеюсь это поможет.

ответил(а) 2013-12-10T00:08:00+04:00 6 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема