python - Django celery : how to set task to run at specific interval programmatically

标签 python django celery django-celery

我发现我可以将任务设置为在特定时间以特定间隔运行 here ,但这只是在任务声明期间完成的。如何将任务设置为动态定期运行?

最佳答案

时间表是derived from a setting ,因此在运行时似乎是不可变的。

您可能可以使用 Task ETAs 完成您正在寻找的东西.这保证您的任务不会在期望的时间之前运行,但不保证在指定的时间运行任务——如果工作人员在指定的 ETA 重载,任务可能会稍后运行.

如果该限制不是问题,您可以编写一个首先自行运行的任务,如:

@task
def mytask():
    keep_running = # Boolean, should the task keep running?
    if keep_running:
        run_again = # calculate when to run again
        mytask.apply_async(eta=run_again)
    # ... do the stuff you came here to do ...

这种方法的主要缺点是您依赖于任务存储来记住运行中的任务。如果其中一个在启动下一个之前失败,则该任务将永远不会再次运行。如果您的代理没有持久保存到磁盘并且它死了(所有正在进行的任务都随之消失),那么这些任务都不会再次运行。

您可以通过某种事务日志记录和周期性的“保姆”任务来解决这些问题,该任务的工作是找到此类过早死亡的重复任务并使它们复活。

如果我必须实现您所描述的内容,我想这就是我的处理方式。

关于python - Django celery : how to set task to run at specific interval programmatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7172584/

相关文章:

python - 覆盖模板 django-allaut

python - 创建具有不同用户类型的数据库表并使用用户名和密码对用户进行身份验证

python - celery 节拍 : ACCESS_REFUSED - Login was refused using authentication mechanism AMQPLAIN

python - 操作错误: unable to open database file in PyCharm with Flask IDE plug-in

python - 修改 Pandas 数据框组的值

python - 支持自动换行的 Canvas create_text() 版本?

python - 在 Azure Web 应用程序中使用 PIP

Celery worker 并通过一个命令击败负载

python - 明确失败 celery 任务

python - 如何将字符串转换为其 Base-10 表示形式?