我正在尝试编写一个程序,其中1个函数将信息添加到队列中,而另一个函数同时读取队列并执行一些misc任务。程序必须将信息放入队列并同时从中读取。
示例:
from multiprocessing import Process
from time import clock, sleep
import Queue
class HotMess(object):
def __init__(self):
self.market_id=['1','2','3']
self.q2=Queue.Queue()
self.session=True
def run(self):
if __name__=='__main__':
t = Process(target=self.get_data)
k = Process(target=self.main_code)
t.run()
k.run()
def main_code(self):
while self.session:
result=self.q2.get()
print(result)
def get_data(self):
#while self.session:
for market in self.market_id:
self.q2.put(market)
mess=HotMess()
mess.run()
现在这产生1 2 3的输出。到目前为止一直很好。但我实际上希望get_data是一个while循环并且基本上无限运行。现在如果你在self.session中取消注释:在get_data函数中并进行缩进。现在它不会产生任何输出,我认为这是因为只要self.session = True,Process get_data就没有完成。
我的问题是我怎样才能使main_code()不等待get_data()并开始处理队列,以便它们都与队列(q2)进行交互。我试着看过程/线程/ POpen,但我离我的舒适区很远,而且有点亏。
答案 0 :(得分:0)
看here
你应该使用multiprocessing.Queue
。这是为了不同过程之间的沟通。
我还将run
更改为start
和join
。
from multiprocessing import Process, Queue
from time import clock, sleep
class HotMess(object):
def __init__(self):
self.market_id=['1','2','3']
self.q2=Queue()
self.session=True
def run(self):
if __name__=='__main__':
t = Process(target=self.get_data)
k = Process(target=self.main_code)
t.start()
k.start()
t.join()
k.join()
def main_code(self):
while self.session:
result=self.q2.get()
print(result)
def get_data(self):
while self.session:
for market in self.market_id:
self.q2.put(market)
mess=HotMess()
mess.run()