繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM