Django Heroku芹菜背景任务
我们有一个简单的任务,在Heroku上运行django芹菜。比如:Django Heroku芹菜背景任务,django,heroku,django-celery,Django,Heroku,Django Celery,我们有一个简单的任务,在Heroku上运行django芹菜。比如: @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 = fie
@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()
其中,origin是一个csv文件。当文件较大(超过50000行)时,任务会占用所有内存,导致R14错误,直到被系统取消(可用内存为512 MB的150%)。内存永远不会释放,我们必须手动重新启动任务
在Linux机器上运行或在开发机器上与Foreman一起运行,它完成时没有任何问题(所有170.000行)。它似乎只在Heroku上泄漏内存。
顺便说一下,我们使用DEBUG=False运行
Heroku执行芹菜任务是否有问题?我们可能会错过什么?这已经成为部署在Heroku上的一个障碍
非常感谢您的帮助。我同意JoshB的说法,您的情况似乎需要超过512MB的内存
- 如果让task
并创建它们的队列,而不是task来处理整个文件,该怎么办。在这种情况下,您在Heroku上的内存不会过载处理_line
- 另一个可能的解决方案是Heroku提供的新服务,您可以在dynos上使用1GB RAM链接:
您可以使用与主机具有相同规格的虚拟机进行本地测试。或用于限制进程内存。通过这种方式,您可以检查您的代码是否在本地仅使用512MB的RAM。只是一个一般的调试建议:我猜这与Django和芹菜都无关。为了证明这一点,我将创建一个最小的Heroku应用程序(没有Django,只是一个普通的“main”),并尝试运行它。如果失败,请先查看requirements.txt,然后添加调试打印。如果成功了,开始逐步添加其余的内容,直到你找到答案。祝你好运你确定它没有在本地使用大量内存而你只是没有注意到吗?