当前位置: 首页 > 面试题库 >

如何向Celery动态添加/删除定期任务(celerybeat)

程谭三
2023-03-14
问题内容

如果我有一个定义如下的函数:

def add(x,y):
  return x+y

有没有一种方法可以动态地将此函数添加为芹菜PeriodicTask并在运行时启动它?我希望能够做类似(伪代码)的事情:

some_unique_task_id = celery.beat.schedule_task(add, run_every=crontab(minute="*/30"))
celery.beat.start(some_unique_task_id)

我还想用(pseudocode)之类的东西动态地停止或删除该任务:

celery.beat.remove_task(some_unique_task_id)

要么

celery.beat.stop(some_unique_task_id)

仅供参考,我不使用djcelery,它使您可以通过django管理员管理定期任务。


问题答案:

不,对不起,常规的芹菜拍不可行。

但是做您想要的事情很容易扩展,例如django-celery调度程序只是一个将调度写入数据库并将其写入数据库的子类(上面有一些优化)。

您也可以将django-celery调度程序用于非Django项目。

像这样:

  • 安装django + django-celery:

$ pip install -U django django-celery

  • 将以下设置添加到您的celeryconfig中:

    DATABASES = {
    'default': {
        'NAME': 'celerybeat.db',
        'ENGINE': 'django.db.backends.sqlite3',
    },
    

    }
    INSTALLED_APPS = (‘djcelery’, )

  • 创建数据库表:

    $ PYTHONPATH=. django-admin.py syncdb --settings=celeryconfig
    
  • 使用数据库调度程序启动celerybeat:

    $ PYTHONPATH=. django-admin.py celerybeat --settings=celeryconfig \
    -S djcelery.schedulers.DatabaseScheduler
    

还有一个djcelerymon命令可用于非Django项目,以在同一过程中启动celerycam和Django
Admin网络服务器,您还可以使用该命令在漂亮的Web界面中编辑定期任务:

   $ djcelerymon

(请注意,出于某些原因,不能使用Ctrl + C停止djcelerymon,您必须使用Ctrl + Z + kill%1)



 类似资料:
  • 问题内容: 如何检查一项任务是否在celery中运行(特别是我在使用celery-django)? 我已经阅读了文档,并且已经在Google上进行了搜索,但是看不到类似以下的呼叫: 我的用例是我有一个外部(java)服务来进行代码转换。当我发送要进行代码转换的文档时,我想检查运行该服务的任务是否正在运行,如果没有运行,请(重新)启动它。 我相信我使用的是当前的稳定版本2.4。 问题答案: 每个对象

  • 问题内容: https://jsfiddle.net/techboy0007/j1eas924/ https://i.stack.imgur.com/KXFot.png 问题答案: 您可以通过反应状态来实现。在您的情况下,您正在使用嵌套对象,因此在更新它们时需要格外小心。 突变您的想法不是一个好主意,因为它很容易导致错误或意外行为。 仔细查看这些功能的工作方式。 在这里,您有一个现场演示。 PD:

  • 问题内容: 我将向celery队列添加多个任务并等待结果。我有各种各样的想法,我将如何利用某种形式的共享存储(memcached,redis,db等)来实现这一目标,但是,我本以为Celery可以自动处理该问题,但我无法在线找到任何资源。 代码示例 问题答案: 对于Celery > = 3.0,使用taskset被弃用赞成组。 在后台启动组: 等待:

  • 通过使用Thymeleaf作为模板引擎,是否可以使用子句在简单的中动态添加/删除CSS类? 通常,我可以使用以下条件子句: 我们将创建指向lorem ipsum页面的链接,但前提是条件子句为true。 我在寻找一些不同的东西:我希望块总是可见的,但是根据情况可以改变类。

  • 我试图熟悉EIP和Apache骆驼,我有一个用例,我不太确定如何使用骆驼来表达或实现 用例: 假设您设计了一个集成解决方案,它从ftp中获取文件,进行一些处理并将其上传到队列。您选择Apache Camel来实现此解决方案,并且您在JavaDSL中的路由如下所示: 路线可能比这复杂得多,但在这里没关系。想象一下你的解决方案是如此的成功,以至于有一个计划来实现一个服务,任何人都可以添加他的ftp服务

  • 本文向大家介绍如何使用Celery和Docker处理Django中的定期任务,包括了如何使用Celery和Docker处理Django中的定期任务的使用技巧和注意事项,需要的朋友参考一下 在构建和扩展Django应用程序时,不可避免地需要定期在后台自动运行某些任务。 一些例子: 生成定期报告 清除缓存 发送批量电子邮件通知 执行每晚维护工作 这是构建和扩展不属于Django核心的Web应用程序所需