Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Heroku芹菜背景任务_Django_Heroku_Django Celery - Fatal编程技术网

Django Heroku芹菜背景任务

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

我们有一个简单的任务,在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 = 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
    处理_line
    并创建它们的队列,而不是task来处理整个文件,该怎么办。在这种情况下,您在Heroku上的内存不会过载

  • 另一个可能的解决方案是Heroku提供的新服务,您可以在dynos上使用1GB RAM链接:

Django会泄漏内存,因为它会保存已执行的每个SQL语句的副本


您可以使用与主机具有相同规格的虚拟机进行本地测试。或用于限制进程内存。通过这种方式,您可以检查您的代码是否在本地仅使用512MB的RAM。

只是一个一般的调试建议:我猜这与Django和芹菜都无关。为了证明这一点,我将创建一个最小的Heroku应用程序(没有Django,只是一个普通的“main”),并尝试运行它。如果失败,请先查看requirements.txt,然后添加调试打印。如果成功了,开始逐步添加其余的内容,直到你找到答案。祝你好运你确定它没有在本地使用大量内存而你只是没有注意到吗?