2
我意識到我可以使用Pool類,並可能得到我需要的東西,但我希望對我的問題有一個更好的控制。我有更多的工作比我做處理器,所以我不希望他們一次全部運行。Python - 多處理 - 更多的工作,cpus。
例如:
from multiprocessing import Process,cpu_count
for dir_name in directories:
src_dir = os.path.join(top_level,dir_name)
dst_dir = src_dir.replace(args.src_dir,args.target_dir)
p = Process(target=transfer_directory, args=(src_dir, dst_dir,))
p.start()
但是,如果我有16個以上的目錄,然後我會開始更多的就業機會比我處理器。這是我的解決方案,真是黑客。
from multiprocessing import Process,cpu_count
jobs = []
for dir_name in directories:
src_dir = os.path.join(top_level,dir_name)
dst_dir = src_dir.replace(args.src_dir,args.target_dir)
p = Process(target=transfer_directory, args=(src_dir, dst_dir,))
jobs.append(p)
alive_jobs = []
while jobs:
if len(alive_jobs) >= cpu_count():
time.sleep(5)
print alive_jobs
for aj in alive_jobs:
if aj.is_alive():
continue
else:
print "job {} removed".format(aj)
alive_jobs.remove(aj)
continue
for job in jobs:
if job.is_alive():
continue
job.start()
alive_jobs.append(job)
print alive_jobs
jobs.remove(job)
if len(alive_jobs) >= cpu_count():
break
是否有更好的解決方案使用內置工具?
這會給你更好的控制嗎? –
那麼如果有人有一個解決方案,能夠鍵盤中斷池模塊沒有凍結,並不得不關閉終端 – jwillis0720
相關:[鍵盤中斷與python的多處理池](http://stackoverflow.com/questions/1408356/鍵盤中斷與 - 蟒蛇的多重處理池)。 –