在python中在进程之间共享/使用对象

2024-05-21 13:51:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在两个进程之间使用一个对象(类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()时,它会打印

None

100

当我运行t.foo2()时,它会打印

None

我的理解是t.foo2()应该打印100。我不明白为什么它没有打印。另外,如何在主进程和新进程之间使用事件对象?你知道吗


Tags: 对象selfnoneeventtarget进程initdef
1条回答
网友
1楼 · 发布于 2024-05-21 13:51:04

我能够通过使用线程中的信号量和线程来实现这一点。地址:

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

相关问题 更多 >