關于以下示例: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調(diào)用都會消耗大量資源,因此我無法并行調(diào)度超過 K( 5) 的資源。不幸的是,即使NUM_POOLS=5每個設置都會pool.apply_async立即返回。如何指定python不讓超過5個worker并行運行?
1 回答

萬千封印
TA貢獻1891條經(jīng)驗 獲得超3個贊
你的程序?qū)ξ襾碚f看起來不錯。
apply_async()
是非阻塞調(diào)用,但它不會覆蓋池邊界。如果您的池有五個工作線程,則只有五個任務正在并行運行。其余的任務將在池中排隊,并且僅在工作人員空閑時才調(diào)度。
您的代碼將阻塞,pool.join()
直到所有工作人員完成為止。如果您需要主程序也被阻止,如果您有五個工作人員正在運行,那么您需要做其他事情,但我無法想象您為什么要這樣做。Pool 將在后臺處理您的調(diào)度,并保持最多 5 個工作線程運行,您無需擔心。
添加回答
舉報
0/150
提交
取消