2011-08-11 24 views
5

URL isteklerini urllib2 kullanarak gerçekleştiren bir python betiğim var. Eşzamansız çalışan ve bir işlev gerçekleştiren 5 işlem havuzum var. Bu işlev, url çağrılarını yapan, veri alan, istenen formatta ayrıştıran, hesaplamaları gerçekleştiren ve veri ekleyen bir işlevdir. Her bir URL isteği için veri miktarı değişir.monitor stuck python process

Bu komut dosyasını bir cron işi kullanarak her 5 dakikada bir çalıştırıyorum. Bazen ps -ef | grep python yaptığımda sıkışmış işlemler görüyorum. Süreçlerin izini sürdürebilen çok-işlemli sınıf içerisinde süreç anlamlarını takip edebilmem, onların devlet anlamlarını tamamlama, takılma ya da ölme gibi bir yol var mı? izlemek için bir yolu var mı

try: 
    Url = "http://gotodatasite.com" 

    data = urllib2.urlopen(Url).read().split('\n') 
except URLError, e: 
    print "Error:",e.code 
    print e.reason 
    sys.exit(0) 

:

i zaman uyumsuz

pool = Pool(processes=5) 
pool.apply_async(getData,) 

işler diyoruz nasıl Bu edilir Ve aşağıdaki urllib2 isteklerini gerçekleştirir getData bir parçasıdır: İşte bir kod parçacığı İşte süreçler sıkıştı ve tekrar tekrar mı?

+1

"stuck?" Bunun ne anlama geldiğini anlatabilir misin? –

+0

Neden bunları "multiproccesing" ile çalıştırmanız gerekiyor? Birden fazla cron işi kullanmanın nesi yanlış? –

+0

@Andrew: Sıkışmış süreçleri kastediyorum. – ash

cevap

1

Çok işlemcili kullanmaya çok eğilimliyseniz, bir ping mekanizması kullanın. Yavaş I/O yüzünden sıkışmış olan süreçleri mi arıyorsun, sanırım?

Şahsen bir kuyruğa (ille bir kuyruk sunucusu) ile gider, örneğin ~/jobs için daha sonra ilk işi alır ve bunu gerçekleştiren bir program var, üzerinde çalışmak için bir URL listesi olduğunu söylüyorlar. Öyleyse bu sadece bir defter tutma meselesidir - söz konusu olduğunda, program notunun ne zaman başladığı ve PID'inin ne olduğu. Yavaş işleri öldürmeniz gerekiyorsa, PID'yi öldür ve işi başarısız olarak işaretleyin. Urllib2 ve zaman aşımı için Google

0

Google. Zaman aşımına ulaşılırsa, bir istisna alırsınız ve işlem artık takılmamıştır.