在python多处理中保留静态类成员



我正在努力保持一个"静态";通过多个进程定义的多处理队列,但似乎没有将此上下文复制到新派生的进程。有没有一种方法可以在不将它们存储到派生过程类的情况下保留它们(因此没有self.q=a.q(?

主.py

from class_b import B
if __name__ == "__main__":
b = B()
b.start()
while True:
pass

class_a.py

from multiprocessing import Process, Queue
class A(Process):
q = Queue()
def __init__(self) -> None:
super().__init__(daemon=True)

class_b.py

from multiprocessing import Process
from class_a import A
class B(Process):
def __init__(self):
super().__init__(daemon=True)
print(A.q)
def run(self):
print(A.q)

控制台

<multiprocessing.queues.Queue object at 0x000001F77851B280>
<multiprocessing.queues.Queue object at 0x0000023C420C2580>

当您从class_a.py导入以访问A.q时,multiprocessing在其自己的过程中也是如此。然后会有两份。您应该在"main"中将其创建为本地,并将其传递到B中。

from class_b import B
from multiprocessing import Queue
if __name__ == "__main__":
q = Queue()
b = B(q)
b.start()
while True:
pass

然后使B为自己存储该引用:

from multiprocessing import Process
class B(Process):
def __init__(self, q):
super().__init__(daemon=True)
print(q)
self.q = q
def run(self):
print(self.q)

最新更新