
进程池中使用子进程
在多任务处理中,面对大量任务需要处理时,进程池是一个很好的选择,因为它避免了最大进程数量限制。但是,在某些场景下,需要子进程创建子进程。如何在进程池中实现这一点呢?
问题解答
要理解如何解决这个问题,首先需要了解进程池的工作原理。进程池使用几个预先创建的 worker 进程来执行任务。这些 worker 进程是进程池创建并管理的。问题所在是因为进程池的 worker 进程不能再创建子进程。
但是,可以使用以下方法来解决这个问题:
-
创建与进程池的 worker 进程数量相同的子进程:
视野自助系统小型企业版2.0 Build 20050310下载自定义设置的程度更高可以满足大部分中小型企业的建站需求,同时修正了上一版中发现的BUG,优化了核心的代码占用的服务器资源更少,执行速度比上一版更快 主要的特色功能如下: 1)特色的菜单设置功能,菜单设置分为顶部菜单和底部菜单,每一项都可以进行更名、选择是否隐 藏,排序等。 2)增加企业基本信息设置功能,输入的企业信息可以在网页底部的醒目位置看到。 3)增加了在线编辑功能,输入产品信息,企业介绍等栏
- 在进程池外创建子进程。
- 在这些子进程中,创建 worker 进程的数量与进程池中相同。
- 在 worker 进程中,创建子进程来执行任务。
下图展示了这种方法:
[图片:进程池中使用子进程的流程图]
-
代码实现:
import multiprocessing import time def print_run(msg): print('msg.%s' % msg) time.sleep(2) def create_child_process(): # 创建多个子进程,每个子进程都创建 worker 进程 child_processes = [] for i in range(10): child = multiprocessing.Process(target=print_run, args=(str(i),)) child.start() child_processes.append(child) # 等待子进程完成 for child in child_processes: child.join() def set_multprocess(): # 创建进程池 pool = multiprocessing.Pool(processes=10) # 创建子进程,在子进程中创建 worker 进程 create_child_process() # 关闭进程池 pool.close() pool.join() print('finished') if __name__ == '__main__': set_multprocess()
这种方法通过将子进程的创建与执行任务分开,解决了在进程池中使用子进程的问题。









