[英]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()”评估为真的情况,在处理作业的过程中,它为另一组作业评估为真,并调用“self._process_pool.map(process,populated_sub_lists)”再次因为我不知道在进程运行时再次调用 map 的后果。
multiprocessing.Pool.map
阻塞调用线程(不一定是 MainThread!),而不是整个进程。 父进程的其他线程不会被阻塞。 您可以从父进程中的多个线程调用pool.map
而不会破坏事物(虽然没有多大意义)。 那是因为Pool
内部使用线程安全queue.Queue
作为_taskqueue
。
从 multiprocessing 文档中, multiprocessing.map
将在执行期间阻塞主进程,直到结果准备好,而multiprocessing.map_async
不会。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.