0

我有以下代码片段,它尝试在多个子流程之间拆分处理。

def search(self):
    print("Checking queue for jobs to process")
    if self._job_queue.has_jobs_to_process():

        print("Queue threshold met, processing jobs.")
        job_sub_lists = partition_jobs(self._job_queue.get_jobs_to_process(), self._process_pool_size)
        populated_sub_lists =  [sub_list for sub_list in job_sub_lists if len(sub_list) > 0]
        self._process_pool.map(process, populated_sub_lists)
        print("Job processing pool mapped")

主进程在 while 循环中调用搜索函数,如果队列达到阈值计数,则处理池将映射到进程函数,其中作业来自队列。我的问题是,python多处理池在执行期间会阻塞主进程还是立即继续执行?我不想遇到“has_jobs_to_process()”评估为 true 并且在处理作业期间,它为另一组作业评估为 true 并且调用“self._process_pool.map(process,populated_sub_lists)”的情况再次因为我不知道在进程运行时再次调用 map 的后果。

4

2 回答 2

3

multiprocessing.Pool.map阻塞调用线程(不一定是 MainThread!),而不是整个进程。父进程的其他线程不会被阻塞。您可以pool.map从父进程中的多个线程调用而不会破坏任何东西(虽然没有多大意义)。那是因为它在内部Pool使用线程安全的.queue.Queue_taskqueue

于 2018-11-01T22:45:08.607 回答
2

从多处理文档中,multiprocessing.map将在执行期间阻塞主进程,直到结果准备好,并且multiprocessing.map_async不会。

于 2018-11-01T21:29:20.740 回答