【问题标题】:Celery - I want only one instance of my task in the queue at a time芹菜 - 我一次只希望队列中有一个任务实例
【发布时间】:2015-04-11 01:03:57
【问题描述】:

我有一个 celery 任务,计划每 15 分钟运行一次。由于某种原因,队列会不时备份,我最终会在队列中得到同一任务的多个实例。我希望 celery 仅在它不存在的情况下将计划任务添加到队列中。这可能吗?

【问题讨论】:

    标签: celery django-celery celery-task


    【解决方案1】:

    这里的文档中提到了这个问题:

    http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#entries

    通常当人们想要确保一次只运行一个任务的实例时,他们会使用锁定策略:

    http://docs.celeryproject.org/en/latest/tutorials/task-cookbook.html#ensuring-a-task-is-only-executed-one-at-a-time

    【讨论】:

    • 谢谢。但是,我不仅仅关心一次只运行一个任务实例——我也不希望两个实例背靠背运行。如果我的周期性任务再次出现并且前一个任务仍在队列中,那么我宁愿根本不将新任务实例放入队列中。
    • Celery 没有内置的方式来做你想做的事。您可以在该示例中使用 LOCK_EXPIRE 设置来确保不会过于频繁地安排任务,或者将其他特殊值放入锁中,例如时间戳,而不是简单的布尔值,以确定上次排队的时间。如果这还不够,那么最好在主管下制作自己的命令行调度程序,而不是使用 celery beat。
    • celery-singletoncelery-once 都可以为您执行此操作。
    猜你喜欢
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2018-11-06
    相关资源
    最近更新 更多