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
.
我有以下代码片段,它试图将处理拆分到多个子流程中。
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
.