使用python编程时,为了充分利用cpu资源,我们会用到multiprocessing模块来创建多个进程执行任务,当任务数量较多时,我们还可以创建一个进程池,将任务异步添加到池中。在一般情况下,我们提前知道了有多少个任务,可以在创建进程池后一次性将任务添加到进程池中。但是如果我们使用多台服务器来处理动态数量的任务,则可以定时获取进程池中正在运行的进程数量,以实现动态的管理。
python的官方文档中没有提供获取进程池中正在运行的进程数量的方法,但是通过观察创建出来的进程池对象后,发现进程池对象的_cache属性可以用于表示当前池中正在运行的进程的情况,其长度课可以代表进程池中正在运行的进程数量。下面是一个简单的示例:
1 | #!/usr/bin/env python |
在上面的示例中,提供了一个简单的test_sleep函数,将根据提供的参数来sleep。我们在创建了一个容量为3的进程池后,向池中异步提交了3个任务,随后每隔一秒钟检查一次池中运行的程序的数量,当所有的程序都运行结束后程序退出。运行该脚本后将会打印如下的结果:
1 | knktc-rbmp:tmp knktc$ python test_pool.py |
可以看出,已经可以监控进程中程序的情况了。此时就可以动态地向池中加入更多的任务了。