芹菜工人失踪而没有错误

时间:2015-12-18 23:02:45

标签: python redis celery

我使用Django app和经纪人“Redis”设置Celery

@task
def proc(product_id,url,did,did_name):
    ## some long operation here

@task
def Scraping(product_id,num=None):
    if num:
        num=int(num) ## this for i can set what count of subtasks run now
    res=group([proc.s(product_id,url,did,dis[did]) for did in  dis.keys()[:num]])()
    result = res.get()
    return sum(result)

前几个子任务运行成功,但后来任何工作人员消失,新任务仍处于RECEIVED状态。因为必须操作它的工人不存在。

我在/ etc / default / celeryd中设置了最小的concurency和2个worker。

我监控CPU和内存使用情况,未检测到高负载。

Celery日志中没有错误!!!

怎么了?

[2015-12-19 04:00:30,131: INFO/MainProcess] Task remains.tasks.proc[fd0ec29c-436f-4f60-a1b6-3785342ac173] succeeded in 20.045763085s: 6
[2015-12-19 04:17:28,895: INFO/MainProcess] missed heartbeat from w2@server.domain.com
[2015-12-19 04:17:28,897: DEBUG/MainProcess] w2@server.domain.com joined the party
[2015-12-19 05:11:44,057: INFO/MainProcess] missed heartbeat from w2@server.domain.com
[2015-12-19 05:11:44,058: DEBUG/MainProcess] w2@server.domain.com joined the party

SOLUTION>>> -------------------------------------------------- ------------)))))

  1. 如果您使用django-celery并希望使用celery作为守护程序:不使用 app()http://docs.celeryproject.org/en/latest/userguide/application.html,而您必须在/ etc / default / celeryd中设置芹菜直接指向您项目的manage.py:CELERYD_MULTI =“$ CELERYD_CHDIR / manage.py celeryd_multi”

  2. 不要禁用心跳!!!!!

  3. 使用芹菜直接管理.py需要:

    1. 创建arg。在/ etc / default / celeryd中的CELERY_APP =“”如果你不这样做,请使用旧的参数“app”制作run-command。

    2. 添加行:“如果您不使用默认设置,请将”DJANGO_SETTINGS_MODULE =“your_app.settings”“导出到celeryd配置

0 个答案:

没有答案