Python - 使用与API通信的并行进程来提高速度

时间:2015-05-17 13:26:48

标签: python python-multiprocessing

我正在尝试编写一个程序,其中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,但我离我的舒适区很远,而且有点亏。

1 个答案:

答案 0 :(得分:0)

here

你应该使用multiprocessing.Queue。这是为了不同过程之间的沟通。

我还将run更改为startjoin

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()