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