调用流程的getter返回None

时间:2018-06-19 13:14:57

标签: python python-3.x process multiprocessing

我目前正在使我的程序使用multiprocessing.Process,我想从我的Process子类中获取一个对象。

主要 .py内部:

p = DataProcessor()
p.start()
#later:
obj = p.x

数据处理器 .py内部:

from multiprocessing import Process
class DataProcessor(Process):
     def __init__(self):
         #call to super etc
         self.x = None

     def run(self):
         while True:
             if self.x is None:
                 self.x = 5 #normally i set this to an object

当我现在想在我的 main 中使用x时,它始终为None。
如何不必使用multiprocessing.Queue就可以使它正常工作? (我认为仅处理一个对象一次,队列既不可读也不有用)

1 个答案:

答案 0 :(得分:0)

您可以使用多处理管道;) 但是,严重的是,您必须使用进程间通信在进程之间共享数据。这是一个简单的示例,可从子进程中检索x

from multiprocessing import Process, Queue
import time


class DataProcessor(Process):
     def __init__(self, queue):
         #call to super etc
         Process.__init__(self)
         self.queue = queue
         self.x = None

     def run(self):
         while True:
             if self.x is None:
                 self.x = 5 #normally i set this to an object
                 self.queue.put(self.x)

if __name__ == '__main__':
    queue = Queue()
    p = DataProcessor(queue)
    p.start()
    #later:
    while queue.empty():
        time.sleep(.1)
    x = queue.get()
    print(x)