我正在尝试创建一组链,当该组被执行时,它只是停止并挂起,看起来非常像死锁。
我检查了Rabbitmq和resultbackend,它们运行得很好。
这是我要复制的虚拟任务:
from pprint import pprint
from time import sleep
@app.task
def a(i):
result = 'A %s' % i
sleep((i%3)/ 10.0)
pprint(result)
return result
@app.task
def b(self,i):
result = 'B %s' % i
sleep((i%3)/ 10.0)
pprint(result)
return result
@app.task
def c(self,i):
result = 'C %s' % i
sleep((i%3)/ 10.0)
pprint(result)
return result
我这样称呼他们
chains = [chain(a.s(i), b.s(i), c.s(i)) for i in range(100)]
g = group(*chains)
result = g.apply_async()
我的设置如下:
# Sensible settings for celery
CELERY_ALWAYS_EAGER = False
CELERY_ACKS_LATE = True
CELERY_TASK_PUBLISH_RETRY = True
CELERY_DISABLE_RATE_LIMITS = False
CELERY_IGNORE_RESULT = False
CELERY_SEND_TASK_ERROR_EMAILS = False
CELERY_TASK_RESULT_EXPIRES = 600
CELERY_REDIS_MAX_CONNECTIONS = 2048
CELERY_TASK_SERIALIZER = "pickle"
CELERY_RESULT_SERIALIZER = "pickle"
CELERY_ACCEPT_CONTENT = ["pickle"]
# CELERY_TASK_SERIALIZER = "json"
# CELERY_ACCEPT_CONTENT = ['application/json']
CELERYD_HIJACK_ROOT_LOGGER = False
CELERYD_PREFETCH_MULTIPLIER = 1
CELERYD_MAX_TASKS_PER_CHILD = 1000
我认为某个地方正在发生死锁,因为所发生的事情有其症状并且根本没有引发任何错误。芹菜的版本是4.1.0。
还有一个奇怪的地方是,当我将CELERY_ALWAYS_EAGER启用为True时,一切都可以正常运行,但是它当然在本地运行,这不是我想要的。非常感谢您的帮助,已经为此努力了几天。