python多处理池阻塞主线程

python多处理池阻塞主线程,python,multithreading,parallel-processing,python-multiprocessing,process-pool,Python,Multithreading,Parallel Processing,Python Multiprocessing,Process Pool,我有下面的代码片段,它试图在多个子进程之间分割处理 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.g

我有下面的代码片段,它试图在多个子进程之间分割处理

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循环中的主进程正在调用search函数,如果队列达到阈值计数,则处理池将映射到进程函数,其中作业来自队列。我的问题是,python多处理池是在执行期间阻塞主进程,还是立即继续执行?我不想遇到这样的场景:“has_jobs_to_process()”的计算结果为true,在处理作业期间,另一组作业和“self._process_pool.map”(进程,填充的子列表)的计算结果为true再次调用,因为我不知道在进程运行时再次调用map的后果。

从多处理文档中,
multiprocessing.map
将在执行过程中阻止主进程,直到结果准备就绪,
multiprocessing.map\u async
将不会

在多处理文档中,
multiprocessing.map
将在执行过程中阻止主进程,直到结果就绪,而
multiprocessing.map\u async
将不会

多处理.Pool.map
阻止调用线程(不一定是主线程!),整个进程。
父进程的其他线程将不会被阻止。您可以从父进程中的多个线程调用
pool.map
,而不会破坏任何东西(不过这没有多大意义)。这是因为
Pool
在内部使用线程安全的
queue.queue
作为它的
\u taskqueue

多处理.Pool.map
阻止调用线程(不一定是主线程!),而不是整个进程。
父进程的其他线程将不会被阻止。您可以从父进程中的多个线程调用
pool.map
,而不会破坏任何东西(不过这没有多大意义)。这是因为
Pool
使用线程安全的
queue.queue
内部是
\u taskqueue

谢谢你的回复,我在通读时错过了那一点。谢谢你的回复,我在通读时错过了那一点。谢谢,我感谢你提供的更多细节。谢谢,我感谢你提供的更多细节。