为了账号安全,请及时绑定邮箱和手机立即绑定

使用多处理队列,池和锁定的简单示例

使用多处理队列,池和锁定的简单示例

慕妹3146593 2019-08-30 16:54:30
我试着阅读http://docs.python.org/dev/library/multiprocessing.html上的文档,但我仍然在努力处理多处理队列,池和锁定。现在我能够构建下面的示例。关于队列和池,我不确定我是否以正确的方式理解了这个概念,所以如果我错了,请纠正我。我想要实现的是在时间处理2个请求(在这个例子中数据列表有8个)所以,我应该使用什么?池创建2个进程,可以处理两个不同的队列(最多2个)或者我应该只使用Queue每次处理2个输入?锁定将正确打印输出。import multiprocessingimport timedata = (['a', '2'], ['b', '4'], ['c', '6'], ['d', '8'],        ['e', '1'], ['f', '3'], ['g', '5'], ['h', '7'])def mp_handler(var1):    for indata in var1:        p = multiprocessing.Process(target=mp_worker, args=(indata[0], indata[1]))        p.start()def mp_worker(inputs, the_time):    print " Processs %s\tWaiting %s seconds" % (inputs, the_time)    time.sleep(int(the_time))    print " Process %s\tDONE" % inputsif __name__ == '__main__':    mp_handler(data)
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

这可能与问题没有100%的关联,但在我搜索使用队列的多处理的示例时,这首先出现在谷歌上。


这是一个基本的示例类,您可以实例化并将项目放入队列中,并且可以等到队列完成。这就是我所需要的一切。


from multiprocessing import JoinableQueue

from multiprocessing.context import Process



class Renderer:

    queue = None


    def __init__(self, nb_workers=2):

        self.queue = JoinableQueue()

        self.processes = [Process(target=self.upload) for i in range(nb_workers)]

        for p in self.processes:

            p.start()


    def render(self, item):

        self.queue.put(item)


    def upload(self):

        while True:

            item = self.queue.get()

            if item is None:

                break


            # process your item here


            self.queue.task_done()


    def terminate(self):

        """ wait until queue is empty and terminate processes """

        self.queue.join()

        for p in self.processes:

            p.terminate()


r = Renderer()

r.render(item1)

r.render(item2)

r.terminate()


查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 382 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信