我正在尝试在两个进程之间使用一个对象(Event 类)。主进程创建对象(self.event)并将其作为参数传递给新进程。新进程将调用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() 时,它会打印
block 引用>None
100
当我运行 t.foo2() 时,它会打印
block 引用>None
我的理解是 t.foo2() 应该打印 100。我无法理解为什么它打印 None。另外,如何在主进程和新进程之间使用事件对象?
最佳答案
我能够使用线程中的信号量和线程来实现这一目标。 :
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()
output
init
None
100
100 finished
关于python - 在Python中的进程之间共享/使用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57978330/