Python Django芹菜redis从队列中删除特定的定期任务
需要从消息队列中删除特定的定期任务。我在这里使用Redis和芹菜的配置 任务。pyPython Django芹菜redis从队列中删除特定的定期任务,python,django,redis,celery,periodic-task,Python,Django,Redis,Celery,Periodic Task,需要从消息队列中删除特定的定期任务。我在这里使用Redis和芹菜的配置 任务。py @定期任务(每运行一次=crontab(分钟='*/6')) def task_abcd(): """ 这里有些行动 """ 项目中还有其他定期任务,但我需要停止这个特定任务,以便从现在开始停止 如本文所述,以下代码可以工作吗 @定期任务(每运行一次=crontab(分钟='*/6')) def task_abcd(): 通过 该代码可以工作,但我会选择一些不强迫您在每次需要禁用/启用任务时更新代码的方法 您可
@定期任务(每运行一次=crontab(分钟='*/6'))
def task_abcd():
"""
这里有些行动
"""
项目中还有其他定期任务,但我需要停止这个特定任务,以便从现在开始停止
如本文所述,以下代码可以工作吗
@定期任务(每运行一次=crontab(分钟='*/6'))
def task_abcd():
通过
该代码可以工作,但我会选择一些不强迫您在每次需要禁用/启用任务时更新代码的方法
您可以使用一个可配置变量,该变量的值可以来自管理面板、配置文件或任何您想要的内容,并在任务处于禁用模式时,使用该变量在代码运行之前返回
例如:
@定期任务(每运行一次=crontab(分钟='*/6'))
def task_abcd():
配置=加载任务的配置
如果未启用config.u:
返回
#这里有些行动
这样,即使您的任务已计划,其操作也不会执行。在本例中,周期性任务计划直接在代码中定义,这意味着它是硬编码的,在没有代码更改和应用程序重新部署的情况下无法动态更改 所提供的代码在开始时删除了任务逻辑或使用simple
return
将起作用,但不是问题的答案-任务仍将运行,只是没有与之一起运行的代码
此外,它是@定期任务
:
“”“不推荐的装饰程序,请使用:设置:beat\u schedule
”“”
因此,不建议使用它
首先,将方法从
@periodic_task
更改为普通芹菜@task
,因为您使用的是Django-最好直接进行以下操作:
现在这只是芹菜任务之一,需要显式调用。或者,它可以定期运行,如果添加到芹菜节拍时间表
对于生产,如果使用多个worker,则不建议使用嵌入式beat(-B)运行芹菜worker-运行芹菜beat调度程序的单独实例
计划可以在芹菜.py
或django项目设置(settings.py
)中进行
它仍然不是很动态,因为重新读取设置应用程序需要重新加载
然后,使用它将允许动态创建计划-需要运行哪些任务以及何时和使用哪些参数。它甚至为管理提供了不错的django管理web视图 如果您只是想删除定期任务,是否已尝试删除该功能,然后重新启动芹菜服务。为了安全起见,您可以重新启动Redis服务和Django服务器
确保删除的函数未在其他任何地方引用 您正在使用django芹菜节拍吗?不,我没有使用django-芹菜节拍。如果您不想执行定期任务,请删除该函数。简单对吧?我真的不知道您在这里的确切用例是什么:(当我删除该函数时,它会显示错误,表示接收到KeyError类型的未注册任务('shared_app.tasks.task_abcd'))。该消息已被忽略和丢弃。这就是问题所在,我的朋友。如果我不想执行该任务,那么这似乎是一个很好的处理方法。但是,如果我想删除该特定任务,而从不将其添加到队列中,该怎么办。例如,从队列中完全删除该任务。有什么解决方案吗?我删除了代码并重新启动了celery服务,但仍不起作用。之前未完成的任务未从队列中删除。感谢您的回答:)我将查看答案并让您知道。:)
from celery import shared_task
@shared_task
def task_abcd():
...