你们中有人知道是否可以在dataclass
中使用multiprocessing.Value
字段吗?
对于下面的数据类定义,我得到了TypeError: this type has no size
异常。
import multiprocessing
from dataclasses import dataclass
@dataclass
class TestResults:
count: multiprocessing.sharedctypes.Synchronized = multiprocessing.Value(int, 0)
堆栈跟踪:
$ python example.py
Traceback (most recent call last):
File "/tmp/example.py", line 5, in <module>
class TestResults:
File "/tmp/example.py", line 6, in TestResults
count: multiprocessing.sharedctypes.Synchronized = multiprocessing.Value(int, 0)
File "/usr/lib/python3.10/multiprocessing/context.py", line 135, in Value
return Value(typecode_or_type, *args, lock=lock,
File "/usr/lib/python3.10/multiprocessing/sharedctypes.py", line 74, in Value
obj = RawValue(typecode_or_type, *args)
File "/usr/lib/python3.10/multiprocessing/sharedctypes.py", line 49, in RawValue
obj = _new_value(type_)
File "/usr/lib/python3.10/multiprocessing/sharedctypes.py", line 40, in _new_value
size = ctypes.sizeof(type_)
TypeError: this type has no size
1条答案
按热度按时间shyt4zoc1#
multiprocessing.Value
需要第一个参数作为数组类型,因此对于int,应该传入“i”表示2字节整数,或者“l”表示4字节整数。由于它是一个可变类型,因此需要使用
field(default_factory)
构造它。