Heroku芹菜背景任务

时间:2013-03-28 19:19:51

标签: django heroku django-celery

我们在Heroku上使用django-celery运行一个简单的任务。类似的东西:

@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文件。当文件很大(超过50,000行)时,任务会占用所有内存,从而导致R14错误,直到被系统取消(150%的可用内存为512 MB)。永远不会释放内存,我们必须手动重启任务。

在Linux机器上运行或在开发机器上运行,它完成没有问题(所有170.000行)。它似乎只是在Heroku上泄漏内存。 顺便说一下,我们运行DEBUG = False。

Heroku实施芹菜任务是否有问题?我们可以缺少什么?这已成为在Heroku上部署的显示器。

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

我同意JoshB的看法,在您的情况下,它似乎需要超过512MB的内存。

  • 如果您创建任务process_line并创建它们的队列而不是任务来处理整个文件,该怎么办?在这种情况下,Heroku上的内存不会超载。

  • 另一种可能的解决方案是Heroku的新服务,你可以在你的dynos上使用1GB RAM。 链接: 2x dynos beta

答案 1 :(得分:0)

Django在DEBUG is set to True时泄漏内存,因为它保存了已执行的每个SQL语句的副本。

您可以使用与托管具有相同规格的虚拟机进行本地测试。或使用ulimit来限制进程内存。这样,您可以检查本地代码是否仅使用512MB RAM。