Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django芹菜redis从队列中删除特定的定期任务_Python_Django_Redis_Celery_Periodic Task - Fatal编程技术网

Python Django芹菜redis从队列中删除特定的定期任务

Python 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(): 通过 该代码可以工作,但我会选择一些不强迫您在每次需要禁用/启用任务时更新代码的方法 您可

需要从消息队列中删除特定的定期任务。我在这里使用Redis和芹菜的配置

任务。py

@定期任务(每运行一次=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():
    ...