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

python与os系统多线程,不超过K个并行命令

python与os系统多线程,不超过K个并行命令

天涯尽头无女友 2023-10-31 19:19:30
关于以下示例:import osNUM_CPUS = None  # defaults to all availabledef worker(f1, f2):    os.system("run program x on f1 and f2") <--- Big command, cannot run more that K in paralleldef test_run(pool):     filelist = os.listdir(files_dir)     for f1 in filelist:          for f2 in filelist:               pool.apply_async(worker, args=(f1, f2))if __name__ == "__main__":     import multiprocessing as mp     pool = mp.Pool(NUM_CPUS)     test_run(pool)     pool.close()     pool.join()每次os.system调用都会消耗大量资源,因此我无法并行调度超过 K( 5) 的资源。不幸的是,即使NUM_POOLS=5每个设置都会pool.apply_async立即返回。如何指定python不让超过5个worker并行运行?
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

你的程序对我来说看起来不错。

apply_async()是非阻塞调用,但它不会覆盖池边界。如果您的池有五个工作线程,则只有五个任务正在并行运行。其余的任务将在池中排队,并且仅在工作人员空闲时才调度。

您的代码将阻塞,pool.join()直到所有工作人员完成为止。如果您需要主程序也被阻止,如果您有五个工作人员正在运行,那么您需要做其他事情,但我无法想象您为什么要这样做。Pool 将在后台处理您的调度,并保持最多 5 个工作线程运行,您无需担心。


查看完整回答
反对 回复 2023-10-31
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

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