Traceback (most recent call last): File "F:/E/python_learn/我的框架/自动化框架2/monitoring.py", line 27, in <module> m = MonitoringProcess() File "F:/E/python_learn/我的框架/自动化框架2/monitoring.py", line 11, in __init__ self.process_start(self.detection_status) File "F:/E/python_learn/我的框架/自动化框架2/monitoring.py", line 17, in process_start value = Value(1) File "C:\Python38\lib\multiprocessing\context.py", line 135, in Value return Value(typecode_or_type, *args, lock=lock, File "C:\Python38\lib\multiprocessing\sharedctypes.py", line 74, in Value obj = RawValue(typecode_or_type, *args) File "C:\Python38\lib\multiprocessing\sharedctypes.py", line 49, in RawValue obj = _new_value(type_) File "C:\Python38\lib\multiprocessing\sharedctypes.py", line 40, in _new_value size = ctypes.sizeof(type_) TypeError: this type has no size
时间: 2024-04-14 16:27:55 浏览: 188
这个错误通常发生在使用 `multiprocessing.Value()` 创建共享值时,提供了无法确定大小的类型。
根据你提供的错误信息,错误发生在 `self.process_start(self.detection_status)` 这行代码中。根据代码推测,可能是在 `process_start` 方法中使用了 `Value()` 函数创建了一个共享值,但提供了一个类型无法确定大小的参数。
为了解决这个问题,你可以尝试使用 `Manager` 对象的 `Value()` 方法创建共享值,而不是使用 `multiprocessing.Value()`。以下是示例代码:
```python
from multiprocessing import Process, Manager
class MonitoringProcess:
def __init__(self):
self.process_start(self.detection_status)
def process_start(self, func):
with Manager() as manager:
value = manager.Value(int, 1)
p = Process(target=func, args=(value,))
p.start()
def detection_status(self, value):
# some code ...
value.value = 1
```
在修正后的代码中,我们使用 `manager.Value(int, 1)` 在 `process_start` 方法中创建了一个共享值。然后,在 `detection_status` 方法中,我们使用 `value.value = 1` 的方式来修改共享值。
希望这次能够帮助你解决问题。如果还有其他疑问,请随时提问。
阅读全文