【发布时间】:2020-06-28 15:51:50
【问题描述】:
在我的 django 应用程序中,我使用的是 celery。在 post_save 信号中,我正在更新弹性搜索中的索引。但是由于某种原因,任务被挂起并且从未真正执行过代码:
我用什么来运行 celery:
celery -A collegeapp worker -l info
信号:
@receiver(post_save, sender=University)
def university_saved(sender, instance, created, **kwargs):
"""
University save signal
"""
print('calling celery task')
update_university_index.delay(instance.id)
print('finished')
任务:
@task(name="update_university_index", bind=True, default_retry_delay=5, max_retries=1, acks_late=True)
def update_university_index(instance_id):
print('updating university index')
我得到的唯一输出是calling celery task。等待超过 30 分钟后,它永远不会到达任何其他打印语句并且视图继续等待。 celery 终端中没有任何显示。
版本: Django 3.0, 芹菜 4.3, Redis 5.0.9, Ubuntu 18
更新:
经过一些测试后,使用celery.py 文件中定义的debug_task 代替update_university_index 不会导致挂起。它的行为与预期一样。我想也许它可能是 app.task 与 task 装饰器,但似乎不是这样。
@app.task(bind=True)
def debug_task(text, second_value):
print('printing debug_task {} {}'.format(text, second_value))
【问题讨论】:
-
你的 celery 版本和操作系统是什么?
-
4.3 和 ubuntu。我会将它们包括在问题中。
-
我假设你有工人并行运行?
-
我不完全确定你的意思。
-
抱歉,您的应用程序和工作人员同时在单独的终端上运行?
标签: django celery django-celery