python - Python 自定义进程池:如何等待众多进程中的一个?
问题描述
我想创建自己的进程池,例如:
from multiprocessing import Process
import time
NB_PROCESS = 10
procs = set()
def do_job(args):
*** some processing ***
if __name__ == '__main__':
while True:
for p in list(procs):
if p.is_alive():
print(f'Proc {p.pid} running...')
else:
print(f'Proc {p.pid} terminated')
procs.remove(p)
for i in range(NB_PROCESS-len(procs)):
job_args=get_job_from_db()
if job_args:
p = Process(target=do_job, args=(job_args,))
p.start()
procs.add(p)
time.sleep(1)
我希望始终运行 10 个进程:我想在一个(不是全部)进程终止后立即启动另一个进程。
实际上我通过使用编写了一个主动等待,.is_alive()
但我发现它根本不干净。
请注意,我不能使用队列,因为我需要等待最后一刻才能决定运行什么作业。
我不能使用 python multiprocessing.Pool
,因为Pool.join()
将等待所有作业被终止。就我而言,我想知道一个工人在做之前是否有空apply_async()
,我看不到任何方法可以做到这一点
job_args=get_job_from_db()
我在do_job()
运行 MySQL 事务时无法输入:每个工作人员都可能得到相同的工作(并发问题)
如何继续等待池中的一个进程终止?
解决方案
推荐阅读
- javascript - 使用 jQuery 检查数据库的用户名
- embedded - 非对称固件加密
- python - 使用 Python 获取链接表的 MS Access 源数据库
- arm - STM32上的数据、指令和flash CCM RAM有什么区别
- lotusscript - 从嵌入视图打开的对话框显示对话框形式,而不是直接返回嵌入视图
- angular - 如何在 Angular 中预览 Docx 文件
- android - 如何从 ImageView 获取像素值
- cmd - 用 4 个维度和多个变量抓取到 netcdf
- graphviz - graphviz - 如何在直箭头上创建标签
- python - 使用 elemettree 获取 XML 中特定标签的内容