为了账号安全,请及时绑定邮箱和手机立即绑定

python多处理池阻塞主线程

python多处理池阻塞主线程

慕桂英546537 2021-08-05 15:19:45
我有以下代码段,它尝试跨多个子流程拆分处理。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 的后果。
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

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


查看完整回答
反对 回复 2021-08-05
?
不负相思意

TA贡献1777条经验 获得超10个赞

从 multiprocessing 文档中,multiprocessing.map将在执行期间阻塞主进程,直到结果准备好,并且multiprocessing.map_async不会。


查看完整回答
反对 回复 2021-08-05
  • 2 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信