Heroku芹菜背景任务

gap*_*nco 6 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()
Run Code Online (Sandbox Code Playgroud)

起源是一个CSV文件.当文件很大(超过50,000行)时,任务会占用所有内存,从而导致R14错误,直到被系统取消(150%的可用内存为512 MB).内存永远不会释放,我们必须手动重启任务.

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

Heroku实施芹菜任务会破坏什么?我们可以缺少什么?这已经成为在Heroku上部署的一个显示器.

任何帮助将受到高度赞赏.

sha*_*hin 0

我同意 JoshB 的观点,您的情况似乎需要超过 512MB 的内存。

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

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