2013-03-28 10 views
6

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.

+0

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! –

+1

Sei sicuro che non stia utilizzando una grande quantità di memoria a livello locale e non l'hai notato? – JoshB

risposta

0

Sono d'accordo con JoshB che sembra richiedere più di 512 MB di memoria nel tuo caso.

  • Che cosa succede se si fanno compito process_line e creare code di loro, invece di compito di gestire l'intero file. In questo caso la tua memoria su Heroku non sarà sovraccaricata.

  • L'altra soluzione possibile per voi può essere un nuovo servizio da Heroku in cui è possibile utilizzare 1 GB di RAM sui propri dynos. Link:2x dynos beta

0

Django perdita di memoria quando DEBUG is set to True perché consente di risparmiare una copia di ogni istruzione SQL ha eseguito.

È possibile eseguire il test localmente utilizzando una macchina virtuale con le stesse specifiche del proprio hosting. Oppure utilizzare ulimit per limitare la memoria del processo. In questo modo puoi verificare se localmente il tuo codice funziona con solo 512 MB di RAM.

Problemi correlati