dip*_*esh 4 python django redis celery periodic-task
有一个特定的周期性任务需要从消息队列中删除。我这里使用的是Redis和celery的配置。
任务.py
@periodic_task(run_every=crontab(minute='*/6'))
def task_abcd():
"""
some operations here
"""
Run Code Online (Sandbox Code Playgroud)
项目中还有其他定期任务,但我需要从现在开始停止此特定任务。
正如这个答案中所解释的,下面的代码可以工作吗?
@periodic_task(run_every=crontab(minute='*/6'))
def task_abcd():
pass
Run Code Online (Sandbox Code Playgroud)
在此示例中,定期任务计划直接在代码中定义,这意味着它是硬编码的,并且在不更改代码和重新部署应用程序的情况下无法动态更改。
所提供的任务逻辑被删除或开头简单的代码return- 将起作用,但不会成为问题的答案 - 任务仍将运行,只是没有代码可以与之一起运行。
另外,建议不要使用 @periodic_task:
"""已弃用的装饰器,请使用 :setting:
beat_schedule。"""
所以不建议使用。
首先,将方法从 be 更改@periodic_task为普通 celery @task,并且因为您使用的是 Django - 最好直接进行@shared_task:
from celery import shared_task
@shared_task
def task_abcd():
...
Run Code Online (Sandbox Code Playgroud)
现在这只是 celery 任务之一,需要显式调用。或者,如果将其添加到 celery 节拍时间表中,则可以定期运行它。
对于生产,如果使用多个工作人员,不建议运行带有嵌入式节拍(-B)的 celery 工作人员 - 运行单独的 celery 节拍调度程序实例。
时间表可以在django 项目设置 ( ) 中指定。celery.pysettings.py
它仍然不是很动态,因为要重新读取设置应用程序需要重新加载。
然后,使用数据库计划程序,它将允许动态创建计划 - 需要运行哪些任务以及何时运行以及使用什么参数。它甚至提供了很好的 django 管理 Web 视图以进行管理!
| 归档时间: |
|
| 查看次数: |
1517 次 |
| 最近记录: |