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
谢谢你的回复,我在通读时错过了那一点。谢谢你的回复,我在通读时错过了那一点。谢谢,我感谢你提供的更多细节。谢谢,我感谢你提供的更多细节。