[英]Sharing/using object between processes in python
我正在尝试在两个进程之间使用(事件类的)对象。 主进程创建对象(self.event)并将其作为args传递给新进程。 新进程将在foo1()中调用Event()的inject()方法,当foo2()被调用时,主进程将再次调用restore。
from multiprocessing import Process, Queue
class Event:
def __init__(self):
print('init')
self.i = None
def inject(self):
print(self.i)
self.i = 100
print(self.i)
def restore(self):
print(self.i)
class Test:
def __init__(self):
self.event = Event()
def foo1(self):
p1 = Process(target=self.foo1_target, args=(self.event,))
p1.start()
p1.join()
def foo1_target(self, event):
event.inject()
def foo2(self):
self.event.restore()
t = Test()
t.foo1()
t.foo2()
当我运行t.foo1()时,它会打印
没有
100
当我运行t.foo2()时,它会打印
没有
我的理解是t.foo2()应该打印100。我不明白为什么它打印None。 另外,如何在主流程和新流程之间使用Event对象?
我能够通过线程使用信号量和线程来实现。 :
from threading import Semaphore, Thread
class Event:
def __init__(self):
print('init')
self.i = None
self.sem = Semaphore(0)
def inject(self):0
print(self.i)
self.i = 100
print(self.i)
self.sem.release()
def restore(self):
self.sem.acquire()
print(self.i, "finished")
class Test:
def __init__(self):
self.event = Event()
def foo1(self):
p1 = Thread(target=self.foo1_target, args=())
p1.start()
p1.join()
def foo1_target(self):
self.event.inject()
def foo2(self):
self.event.restore()
if __name__ == '__main__':
t = Test()
t.foo1()
t.foo2()
输出
init
None
100
100 finished
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.