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

标签 python object queue shared multiprocess

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

None

100

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

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/

相关文章:

python - 使用 Jinja 循环浏览 2D 列表

javascript - 在回调中访问父对象和调用对象?

Python 与空闲进程的进程间通信

c++ - FIFO 列表(移动元素)[C++]

python - chrome 上的 DevTools 远程调试无法与 headless-chrome 正常工作

python - ManyToManyField 序列化模型缺乏数据

python - 我们可以检查 python 中的 string 中是否有两个或多个子字符串

java - 在java中调用构造函数

Java - 定义用于创建对象的行,而不是仅使用方法

python - 两个同时的 Python 循环产生一个结果