Herokuでdjango-celeryを実行するという単純なタスクがあります。ような何か:起源は、csvファイルをあるHerokuセロリのバックグラウンドタスク
@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()
。ファイルが大きい場合(50.000行以上)、タスクはすべてのメモリーを占有し、システムによって取り消されるまでR14エラーを出します(512MBの使用可能メモリーの150%)。メモリは決して解放されず、手動でタスクを再起動する必要があります。
Linuxマシンで、または開発マシンで営業している人は、問題なく完了します(すべて170.000行)。それはHeroku上にのみメモリをリークしているようだ。 ところで、DEBUG = Falseで実行します。
Herokuのセロリタスクの実装で何かが壊れていますか?私たちは行方不明になることは何ですか?これはHerokuで展開する上でのショーストッパーになっています。
ご協力いただければ幸いです。
ちょうど一般的なデバッグの提案:私の推測は、これはDjangoとCeleryのどちらにも関係ないということです。それを証明するために、私はこれを行う最小限のHerokuアプリ(Djangoなし、普通の "メイン")を作成し、それを実行しようとします。失敗した場合は、まずrequirements.txtを見て、後でデバッグプリントを追加してください。それが成功すれば、あなたがそれを理解するまで徐々に残りのものを追加してください。がんばろう! –
大量のメモリをローカルに使用しておらず、気づいていないことは確かですか? – JoshB