Abbiamo un compito semplice in esecuzione con django-sedano su Heroku. Qualcosa di simile:Heroku sedici attività in background
@task
Simple_task():
for line in csv.reader(origin):
process_line(line)
process_line(line):
fields = parse_line(line)
reg = Model1() # Django model
reg.field1 = fields[0]
reg.field2 = fields[1]
reg.field3 = fields[2]
reg.save()
Dove origine è un file csv. Quando il file è grande (oltre 50.000 righe), l'attività occupa tutta la memoria, dando errori R14 fino a quando non viene annullata dal sistema (al 150% della memoria disponibile di 512 MB). La memoria non viene mai rilasciata e dobbiamo riavviare manualmente l'attività.
Esecuzione in una macchina Linux o con capomastri sulla macchina di sviluppo, completa senza problemi (tutte le 170.000 linee). Sembra che stia perdendo memoria SOLO su Heroku. A proposito, corriamo con DEBUG = False.
C'è qualcosa di rotto con l'implementazione di Heroku dei compiti di sedano? Qualcosa che possiamo mancare? Questo è diventato uno spettacolo per la distribuzione su Heroku.
Qualsiasi aiuto sarebbe molto apprezzato.
Solo un suggerimento di debug generale: la mia ipotesi è che questo non è correlato né a Django né a Celery. Per dimostrarlo, creerei un'app minima per Heroku (senza Django, solo un semplice "main") che fa questo, e provo a eseguirlo. Se fallisce, guarda prima il tuo requirement.txt e aggiungi le stampe di debug in un secondo momento. Se riesce, inizia gradualmente ad aggiungere il resto della roba fino a quando non lo capisci. In bocca al lupo! –
Sei sicuro che non stia utilizzando una grande quantità di memoria a livello locale e non l'hai notato? – JoshB