如何在使用Python多处理库完成进程时请求新任务?

时间:2013-08-07 05:04:18

标签: python multithreading multiprocessing

基本上,我希望有一个池来线程来执行某段时间内的某些任务。我认为Python中的多处理库对我来说是完美的。但是,我无法找到一种方法,因为当其中一个进程完成(并且不等待池中的其他线程完成),返回主线程并执行某些任务(增量变量,检查是否有时间)已满足阈值等,以便可能使用新参数启动新进程。例如,这里为函数的所有参数都预先给出(1..10),以便处理进程池(4):

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]"

但是,由于我需要在特定时间段内执行某些任务,这对我没有帮助,因为我不一定知道这些任务需要多长时间才能完成。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

其中一个解决方案是使用共享队列。例如:

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以显示稍后添加数据时的工作原理(进程等待共享队列中的某些内容可用)。