Küçük bir işçiler havuzum var (4) ve çok büyük bir görev listesi (5000 ~). Bir havuz kullanıyorum ve görevleri map_async() ile gönderiyorum. Çalıştığım görev oldukça uzun olduğu için, 1 uzunluğundaki bir parçayı zorluyorum, böylece uzun bir süreç daha kısa olanları tutamaz.Python: Çok işlemcili bekleyen bekleyen görevlerin sayısını nasıl kontrol edebilirim?
Ne yapmak istediğim, kaç tane görevin gönderilmeye alındığını periyodik olarak kontrol etmektir. En fazla 4'ün aktif olacağını biliyorum, kaç tane işlenecek ile ilgileniyorum.
Etrafımda dolaştım ve bunu yapan kimseyi bulamıyorum. Bildiğim
import multiprocessing
import time
def mytask(num):
print('Started task, sleeping %s' % num)
time.sleep(num)
pool = multiprocessing.Pool(4)
jobs = pool.map_async(mytask, [1,2,3,4,5,3,2,3,4,5,2,3,2,3,4,5,6,4], chunksize=1)
pool.close()
while True:
if not jobs.ready():
print("We're not done yet, %s tasks to go!" % <somethingtogettasks>)
jobs.wait(2)
else:
break
Bir RHEL-6 sisteminde python2.6 kullanıyorum ancak farklı sürümler/platformlar üzerinde örneklere açık olduğumu belirtmeliyim. Görev tamamlandığında – jkeating
statik değişken azalır mı? (ve görev açıkça başladığında artar). – Enders
Görevler, çalışanlar gelene kadar "başlatılmıyor". Yapılması gereken görevlerin büyüklüğü olan bir global yaratmış olsaydım, o zaman bunu başarabilecek bir görev başlatıldığında her seferinde azaldıysam, ama bu biraz garip ve bazı iplik güvenliği düşüncesi gerektiriyorsa. – jkeating