class MonitoringProcess: conn1, conn2 = Pipe() monitor = True def __init__(self): self.process_start(self.detection_status) def set_monitor(self): self.com_dict["monitor"] = False def process_start(self, func): with Manager() as manager: self.com_dict = manager.Namespace() p = Process(target=func, args=(self.com_dict,)) p.start() def detection_status(self, com_dict): ... com_dict.a=1
时间: 2024-04-14 10:27:52 浏览: 166
在你的代码中,你使用了 `multiprocessing.Manager` 来创建一个共享的命名空间对象,但是在 `detection_status` 方法中,你尝试直接给 `com_dict` 添加了一个属性 `a`。然而,在 `Manager` 创建的命名空间对象中,你应该使用点语法来访问和修改属性,而不是使用赋值语句。
以下是修正后的代码示例:
```python
from multiprocessing import Process, Manager, Pipe
class MonitoringProcess:
def __init__(self):
self.conn1, self.conn2 = Pipe()
self.monitor = True
self.process_start(self.detection_status)
def set_monitor(self):
self.com_dict.monitor = False
def process_start(self, func):
with Manager() as manager:
self.com_dict = manager.Namespace()
p = Process(target=func, args=(self.com_dict,))
p.start()
def detection_status(self, com_dict):
# some code ...
com_dict.a = 1
```
在修正后的代码中,我修改了 `conn1, conn2 = Pipe()`,将其放在了 `__init__` 方法中,以确保正确的初始化。同时,在 `detection_status` 方法中,我使用了点语法来给 `com_dict` 对象添加属性 `a`。
希望这次能够帮助你解决问题。如果还有其他疑问,请随时提问。
阅读全文