Python多处理池阻塞主线程

时间:2018-11-01 20:56:48

标签: python multithreading parallel-processing

我有以下代码段,尝试将处理分为多个子流程。

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的后果。

2 个答案:

答案 0 :(得分:1)

在多处理文档中,multiprocessing.map将在执行期间阻止主进程,直到结果准备就绪为止,而multiprocessing.map_async不会。

答案 1 :(得分:1)

multiprocessing.Pool.map阻止调用线程(不一定是MainThread!),不是整个过程。 父进程的其他线程将不会被阻止。您可以在父进程中从多个线程调用pool.map而不会破坏事情(尽管没有多大意义)。这是因为Pool在内部queue.Queue使用了线程安全的_taskqueue