python 多处理池阻塞主线程

python multiprocessing pool blocking main thread

我有以下代码片段,它试图将处理拆分到多个子流程中。

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

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

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