Ich habe ein Python-Skript, das URL-Anfragen mit urllib2 durchführt. Ich habe einen Pool von 5 Prozessen, die asynchron laufen und eine Funktion ausführen. Diese Funktion ist diejenige, die die URL-Anfragen durchführt, Daten abruft, sie in das erforderliche Format analysiert, Berechnungen durchführt und Daten einfügt. Die Menge der Daten variiert für jede URL-Anfrage.
Ich führe dieses Skript alle 5 Minuten mit einem Cron-Job aus. Manchmal, wenn ich ps -ef | grep python
mache, sehe ich festsitzende Prozesse. Gibt es eine Möglichkeit, die Prozesse zu verfolgen, d.h. innerhalb der Multiprocessing-Klasse, die die Prozesse, ihren Zustand - abgeschlossen, festsitzend oder tot - festhalten kann? Hier ist ein Code-Schnipsel:
So rufe ich asynchrone Prozesse auf
pool = Pool(processes=5)
pool.apply_async(getData, )
Und folgendes ist ein Teil von getData, der urllib2-Anfragen durchführt:
try:
Url = "http://gotodatasite.com"
data = urllib2.urlopen(Url).read().split('\n')
except URLError, e:
print "Fehler:",e.code
print e.reason
sys.exit(0)
Gibt es eine Möglichkeit, festsitzende Prozesse zu verfolgen und sie erneut auszuführen?