如何在进程使用Python多处理库完成时请求新任务?
基本上,我希望有一个线程池,在给定的时间段内执行一些任务。我认为Python中的多处理库非常适合我这样做。但是,我无法找到一种方法,当其中一个进程完成时(并且不等待池中的其他线程完成),返回主线程并执行某些任务(增量变量、检查是否满足时间阈值等),以使用新参数启动新进程。例如,在这里,函数的所有参数都预先(1..10)提供给要处理的进程池(4):如何在进程使用Python多处理库完成时请求新任务?,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,基本上,我希望有一个线程池,在给定的时间段内执行一些任务。我认为Python中的多处理库非常适合我这样做。但是,我无法找到一种方法,当其中一个进程完成时(并且不等待池中的其他线程完成),返回主线程并执行某些任务(增量变量、检查是否满足时间阈值等),以使用新参数启动新进程。例如,在这里,函数的所有参数都预先(1..10)提供给要处理的进程池(4): from multiprocessing import Pool def f(x): return x*x if __name__ == '__m
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4) # start 4 worker processes
print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]"
但是,由于我需要在特定的时间段内执行某些任务,这对我没有帮助,因为我不一定知道完成这些任务需要多长时间。有没有办法做到这一点?解决方案之一是使用共享队列。例如:
from multiprocessing import Process, Queue
import time
def job(queue):
while True:
task = queue.get()
print task*task
if __name__ == '__main__':
# create shared queue
q = Queue()
# create processes
processes = []
for i in range(5):
p = Process(target=job, args=(q,))
p.start()
processes.append(p)
# generate data
for i in range(5):
for j in range(10):
q.put(10*i+j)
time.sleep(0.5)
# join
for p in processes:
p.join()
我添加了
time.sleep
,以显示稍后添加数据时它是如何工作的(进程等待共享队列中有可用的数据)。解决方案之一是使用共享队列。例如:
from multiprocessing import Process, Queue
import time
def job(queue):
while True:
task = queue.get()
print task*task
if __name__ == '__main__':
# create shared queue
q = Queue()
# create processes
processes = []
for i in range(5):
p = Process(target=job, args=(q,))
p.start()
processes.append(p)
# generate data
for i in range(5):
for j in range(10):
q.put(10*i+j)
time.sleep(0.5)
# join
for p in processes:
p.join()
我添加了
time.sleep
,以显示稍后添加数据时它是如何工作的(进程等待共享队列中有可用的内容)。在工作人员之间使用共享队列,并将任务推送到那里。请参阅我的示例实现:在工作人员之间使用共享队列,并将任务推送到那里。请参见我的示例实现: