Ho uno script Python molto semplice che utilizza gevent.pool per scaricare gli URL (vedi sotto). Lo script funziona bene per un paio di giorni e poi si blocca. Ho notato che l'utilizzo della memoria è molto alto in quel momento. Sto usando gevent in modo errato?Script Python con Gevent Pool, consuma molta memoria, si blocca
import sys
from gevent import monkey
monkey.patch_all()
import urllib2
from gevent.pool import Pool
inputFile = open(sys.argv[1], 'r')
urls = []
counter = 0
for line in inputFile:
counter += 1
urls.append(line.strip())
inputFile.close()
outputDirectory = sys.argv[2]
def fetch(url):
try:
body = urllib2.urlopen("http://" + url, None, 5).read()
if len(body) > 0:
outputFile = open(outputDirectory + "/" + url, 'w')
outputFile.write(body)
outputFile.close()
print "Success", url
except:
pass
pool = Pool(int(sys.argv[3]))
pool.map(fetch, urls)
Sembra una perdita di memoria in 'gevent'. Un rapido google per "python gevent memory leak" restituisce un numero sorprendentemente alto di hit, sebbene tu sia probabilmente in una posizione migliore per determinare se qualcuno di essi si applica al caso specifico. – Aya