Chúng tôi có một nhiệm vụ đơn giản chạy với django-cần tây trên Heroku. Một cái gì đó như:Nhiệm vụ nền cần tây 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()
Nơi nguồn gốc là tệp csv. Khi tệp lớn (hơn 50.000 dòng), tác vụ chiếm toàn bộ bộ nhớ, cho lỗi R14 cho đến khi hệ thống bị hủy (với 150% bộ nhớ khả dụng là 512 MB). Bộ nhớ không bao giờ được phát hành và chúng tôi phải khởi động lại tác vụ theo cách thủ công.
Chạy trên máy Linux hoặc với máy phát trên máy phát triển, nó hoàn thành không có vấn đề gì (tất cả 170.000 dòng). Nó dường như bị rò rỉ bộ nhớ chỉ trên Heroku. Nhân tiện, chúng tôi chạy với DEBUG = False.
Có vấn đề gì xảy ra với việc thực hiện nhiệm vụ cần tây của Heroku không? Bất cứ điều gì chúng ta có thể bị mất tích? Điều này đã trở thành một show-stopper khi triển khai trên Heroku.
Mọi trợ giúp sẽ được đánh giá cao.
Chỉ là một gợi ý gỡ lỗi chung: tôi đoán là điều này không liên quan đến cả Django lẫn Celery. Để chứng minh rằng, tôi sẽ tạo ra một ứng dụng Heroku tối thiểu (w/o Django, chỉ là một "chính" đồng bằng) mà thực hiện điều này, và cố gắng chạy nó. Nếu không thành công, hãy xem tệp requirements.txt của bạn trước và thêm bản in gỡ lỗi sau. Nếu thành công, hãy bắt đầu dần dần thêm phần còn lại của nội dung cho đến khi bạn tìm ra. Chúc may mắn! –
Bạn có chắc chắn rằng nó không sử dụng một lượng lớn bộ nhớ cục bộ và bạn chỉ không nhận thấy? – JoshB