在 Django 中使用 SQLite 作为 Celery 代理

在 django 中使用 sqlite 作为 celery 代理

redis 和 rabbitmq 可能是使用 celery 时的首选代理,但当您在本地开发时,它们可能会让人感觉大材小用。 celery 5.4 的文档提到您可以使用 sqlite 作为本地开发的实验代理。然而,当您导航到 celery 的后端和代理页面时,唯一提到的 sql 是针对 sqlalchemy 后端。值得庆幸的是,该页面指出,“本节并未全面介绍后端和代理。”

这篇文章将向您展示如何在 django 项目中为 celery 实现 sqlite 代理(或任何 sql!)。这篇文章不会教你使用 celery:查看 celery 官方文档。

在我们开始之前

出于本文的目的,我们假设您已经有一个现有的 django 项目,并且使用 celery 官方“django 的第一步”指南中的步骤安装了 celery。 celery 后端不是必需的,但您可能需要按照指南的步骤安装和配置 django-celery-results。如果您不清楚后端经纪人之间的区别,请查看我的文章“了解 celery 中的任务、经纪人、工作人员和后端”。

除非另有明确说明,所有源文档链接均适用于发布时(2024 年 7 月)当前版本的 django、celery 和 sqlalchemy。如果你在遥远的将来读到这篇文章,事情可能已经改变了。

设置 sql 代理

虽然 celery 管理任务和队列,但它委托给另一个名为 kombu 的库来与代理交换消息。 rabbitmq 和 redis 是 kombu 功能最齐全的传输(代理),但它还具有适用于 amazon sqs、zookeeper 和 mongodb 的虚拟传输。

隐藏在 kombu 文档的最角落里的是一个支持 postgresql、mysql 和 sqlite 的 sqlalchemy 传输模型。曾几何时,sqlalchemy 代理甚至在 celery 的网站上有记录,但此后它已从库的新版本的文档中删除。尽管如此,它仍然足以满足当地的发展。

要在 django 应用程序中使用后续数据库作为 celery 代理,请首先安装 sqlalchemy:

pip install sqlalchemy

登录后复制

在 django 项目的 settings.py 文件中,您可以使用 celery_broker_url 设置来设置代理的后端:

# base_dir is the directory of your project's main directory.celery_broker_url = f"sqlalchemy+sqlite:////{base_dir}/broker.sqlite3"

登录后复制

sqlalchemy 经纪人 url 由 3 部分组成:

字符串 sqlalchemy 或 sqla (它们可以互换)a+号一个 sqlalchemy 连接字符串

mac/unix 和 windows 上的 sqlite 连接字符串是不同的:

# macos/unixcelery_broker_url = "sqla+sqlite:////your/project/path/broker.sqlite3"# windowscelery_broker_url = "sqla+sqlite:///c:your\project\path\broker.sqlite3"

登录后复制

您还可以使用 postgres 作为 celery 代理,或者您也可以轻松使用 mysql 作为 celery 代理:

# mysqlcelery_broker_url = "sqlalchemy+mysql://scott:tiger@localhost/foo"# postgresqlcelery_broker_url = "sqla+postgresql://scott:tiger@localhost/mydatabase"# posgresql connecting using pg8000celery_broker_url = "sqla+postgresql+pg8000://scott:tiger@localhost/mydatabase"

登录后复制

您可能需要安装其他库来连接 mysql 或 postgresql,您安装的库可能会影响 sqlalchemy 连接字符串。检查 sqlalchemy 数据库 url 文档以获取更多详细信息。

无论您选择哪个数据库,您都可能需要考虑将代理 url 存储在环境变量中,以便在不同环境中轻松更改:

CELERY_BROKER_URL = os.getenv("CELERY_BROKER_URL")

登录后复制

一句警告

sqlalchemy 传输可能被认为是实验性的,因此它不适合生产使用。可能会发生数据丢失,或者消息可能会被多次传送。考虑切换到 celery 的经纪商和后端页面上列出的更强大的经纪商。

也就是说,这对于本地开发,甚至小型副项目来说可能没问题。但如果将来无法使用 sqlalchemy 作为代理,我也不会感到震惊。

下一步

在本地运行 celery 后,您就可以开始开发队列驱动的应用程序了。然而,您可能会发现它缺乏自动重新加载是一个摩擦点。如果您想在 django 应用程序中设置自动 celery 重新加载,请阅读我的文章“使用自定义 django 命令自动重新加载 celery 工作线程。”

以上就是在 Django 中使用 SQLite 作为 Celery 代理的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2197832.html

(0)
上一篇 2025年2月25日 22:35:20
下一篇 2025年2月25日 22:35:38

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Java与SpringBoot对redis的使用方式是什么

    1.Java连接redis redis支持哪些语言可以操作 (去redis官网查询) 1.1 使用Jedis  (1)添加jedis依赖             junit            junit            4.12 …

    2025年3月30日 编程技术
    100
  • SpringBoot怎么整合Mongodb实现增删查改

    一、什么是MongoDB mongodb与我们之前熟知的关系型数据库(mysql、oracle)不同,mongodb是一个文档数据库,它具有所需的可伸缩性和灵活性,以及所需的查询和索引。 MongoDB将数据存储在灵活的、类似JSON的文档…

    2025年3月30日 编程技术
    100
  • nginx怎么集成lua操作mysql

    实现思路 直接在nginx做配置黑名单,通过编写逻辑块实现; 在服务端(Java)中编写过滤器,在过滤器中统一拦截; 在服务端(Java)中编写拦截器,在拦截器中统一拦截; 这里列举了3种实现的思路,至于实现方案,可能还有更多,但是我们想想…

    2025年3月30日 编程技术
    100
  • 使用PHP和Redis实现自动补全搜索

    在现代网站开发中,搜索功能是必不可少的。但是,当用户开始输入查询关键词时,搜索引擎通常会等待用户输入完成,然后执行一次完整的搜索。这会降低用户体验和响应速度,特别是在拥有大量数据的情况下。 为了提高用户体验和响应速度,我们可以使用自动补全搜…

    编程技术 2025年3月30日
    100
  • Redis在PHP应用中的数据库索引

    redis是一款常用的内存数据库,它被广泛使用在各种语言和应用中,其中包括php。 php是一种使用广泛的web编程语言,开发者在使用php编写web应用程序时往往需要使用外部数据存储以及快速访问这些数据。而redis的快速读写能力使得其成…

    编程技术 2025年3月30日
    100
  • springboot整合mongodb的方法是什么

    1.mongodb的安装和简介 1.1简介 作为一个开源数据库系统,mongodb使用c++语言来构建,采用分布式文件存储技术。在高负载的情况下,添加更多的节点,可以保证服务器性能。mongodb的目标是提供一个能够可扩展高性能的数据存储解…

    2025年3月30日
    100
  • mysql8.0和5.7的区别有哪些

    mysql8.0和5.7的区别有:1、MySQL8.0引入了更快和更高效的编码器和解码器,MySQL5.7的编码器和解码器比较慢;2、认证方式不同,MySQL8.0比MySQL5.7的登录认证插件更安全;3、MySQL 8.0引入了更多窗口…

    2025年3月30日
    100
  • Swoole与MongoDB的整合:构建高性能的文档数据库系统

    在现代企业应用程序开发中,需要处理海量数据和高并发的访问请求。为了满足这些需求,开发人员需要使用高性能的数据库系统,以确保系统的稳定性和可扩展性。本文将介绍如何使用swoole和mongodb构建高性能的文档数据库系统。 Swoole是一个…

    编程技术 2025年3月30日
    100
  • PHP开发:使用 MongoDB 和 Atlas 实现时序数据和地理数据存储和统计

    随着互联网的快速发展,大量的数据被不断地产生和积累。对于企业来说,如何高效地处理这些数据并进行有意义的分析是一个非常重要的问题。而在大数据的应用中,时序数据和地理数据是两种非常常见的类型。本文将介绍如何使用 mongodb 和 atlas …

    编程技术 2025年3月30日
    100
  • PHP开发:使用 MySQL 5 和 MySQL 8 优化数据库性能和查询优化

    随着互联网技术的迅速发展和应用的广泛推广,大量的数据产生并迅速膨胀,对数据库的存储和查询提出了更高的要求。在众多数据库中,mysql因其简单易用和高性能等优点得到广泛应用,尤其是在php开发中。本文将介绍如何利用mysql 5和mysql …

    编程技术 2025年3月30日
    100

发表回复

登录后才能评论