Python - 在将完成的任务添加回列表的同时并行化任务列表

时间:2014-01-12 04:31:50

标签: python multithreading queue

我有一组任意大量的cpu密集型任务,每个任务需要大约2秒才能完成,我想在多核计算机上每5-15秒重复一次。在python中实现这一目标的最佳方法是什么?我想每当一个进程完成时,应该将完成的任务推回到任务列表中,然后免费进程从列表中获取下一个要运行的任务。从我的搜索,我认为这将需要一个共享队列和每个进程的线程的组合?我对python多处理是一个新手,所以一些指导真的可以帮助我。

1 个答案:

答案 0 :(得分:0)

我无法猜测你的任务的性质(特别是你为什么要重复相同的任务),但是这段代码会让处理器一遍又一遍地忙着处理相同的任务。 我已经留下了你必须填写的漏洞。我真的不明白你对时间的要求,但当你把工作放回队列时,你可以包括一个数据项,说明工作应该多久再跑一次。

#!/usr/bin/python3

from multiprocessing import *
import time

def nic_process( q ):
    while True:
        job = q.get()
        # perform task
        print(job)

        # add a delay to make timing happy
        time.sleep(1)

        # Put the job back into the queue.
        q.put(job)


if __name__ == '__main__':
    job_q = Queue()
    proc_count = cpu_count()

    pool = [ Process(target=nic_process, args=(job_q,)) for p in range(proc_count) ]
    for p in pool:
        p.start()

    # Fill the job queue.
    job_q.put(['job1','params',0,999])
    job_q.put(['job2','params',1000,1999])
    job_q.put(['job3','params',2000,2999])
    # ...