多处理python是否可以按顺序向池中发送作业

时间:2016-05-11 15:45:49

标签: python multiprocessing

我正在尝试将作业逐个发送到池中(由于内存限制,我无法使用map)。如果有可用的工作人员,否则池可以消化,否则等待? 例如我可以这样做吗? p = Pool(n_workers) for item in list: p.work_on_this(item) 如果池中有更多可用的工作者,则work_on_this发送作业,否则等待它发生。

1 个答案:

答案 0 :(得分:0)

解决问题的方法是使用一个用工人数量初始化的信号量。您在进入池之前以及在工人完成任务之后获取并释放信号量。

以下是使用Python 2.6或更高版本的示例。

from threading import Semaphore
from multiprocessing import Pool


def TaskManager:
    def __init__(self, processes):
        self.pool = Pool(processes=processes)
        self.workers = Semaphore(processes)

    def new_task(self):
        """Start a new task, block if all workers are busy."""
        self.workers.acquire()
        self.pool.apply_async(function, callback=self.task_done)

    def task_done(self, results):
        """Called once task is done, releases the caller if blocked."""
        self.workers.release()