我使用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>>> -------------------------------------------------- ------------)))))
如果您使用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”
不要禁用心跳!!!!!
使用芹菜直接管理.py需要:
创建arg。在/ etc / default / celeryd中的CELERY_APP =“”如果你不这样做,请使用旧的参数“app”制作run-command。
添加行:“如果您不使用默认设置,请将”DJANGO_SETTINGS_MODULE =“your_app.settings”“导出到celeryd配置