【问题标题】:django celery only calls 1 of 2 apply_async taskdjango celery 仅调用 1 of 2 apply_async 任务
【发布时间】:2016-04-21 15:22:31
【问题描述】:

我需要调用以下 2 个 apply_async 任务:

escalate.apply_async((e.id), countdown=3)
escalate.apply_async((e.id), countdown=3)

我的任务实现如下:

@app.task
def escalate(id, group):

      escalation_email, created = EscalationEmail.objects.get_or_create()
      escalation_email.send()

    return 'sup email sent'

我使用以下命令运行该工作:

celery -A proj worker -l info --concurrency=10

问题是当我查看worker时,只收到1个任务,然后只有1个成功。此外,仅发送 1 封电子邮件。

第二个升级任务似乎大部分时间都在运行。

我如何确保这些任务都能 100% 可靠地触发?

【问题讨论】:

  • 你怎么称呼芹菜?尝试添加 --concurrency=2
  • @SebastianSmolorz 我打电话给工人: celery -A proj worker -l info --concurrency=10 ,但它仍然只运行其中一项任务。当我启动两个不同的工人时,它会处理这两个任务。问题依然存在,如果调用了 3 个任务会发生什么,如果没有 2 个 worker,第 3 个任务会不会执行?
  • 只有当您尝试发送 2 个相同的任务时才会出现此问题?尝试编写另一个虚拟任务并以相同的方式调用它。顺便说一句,您可以只使用task.delay() 而不是task.apply_async()
  • @SebastianSmolorz 我需要在不同的时间发送任务,一个在 30 秒,一个在 5 分钟。我可以在 delay() 函数中设置倒计时参数吗?
  • 抱歉,请阅读文档,延迟是 apply_async 的快捷方式,但它“...不支持执行选项”。那么当你从代码中稍微不同的地方用不同的倒计时调用它时呢?尝试使其工作并找出导致问题的原因。信息这么少,真的很难说。这不应该发生,但它可能是 Celery 本身的问题。

标签: python django celery django-celery


【解决方案1】:

问题是我没有选择一个队列来关联任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-23
    • 2018-11-12
    • 2019-05-15
    • 2013-10-14
    • 1970-01-01
    • 2011-06-19
    • 2018-05-03
    • 2019-07-02
    相关资源
    最近更新 更多