使用 Redis

安装

对 Redis 的支持需要额外的依赖。你可以用 celery[redis] 捆绑 同时安装 Celery 和这些依赖:

$ pip install -U celery[redis]

配置

配置非常简单,只需要设置 Redis 数据库的位置:

BROKER_URL = 'redis://localhost:6379/0'

URL 的格式为:

redis://:password@hostname:port/db_number

URL Scheme 后的所有字段都是可选的,并且默认为 localhost 的 6479 端口,使用数据库 0。

可见性超时

可见性超时时间定义了等待职程在消息分派到其他职程之前确认收到任务的秒数。一定要阅读下面的 警示 一节。

这个选项通过 BROKER_TRANSPORT_OPTIONS 设置:

BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}  # 1 hour.

Redis 的默认可见性超时时间是 1 小时。

结果

如果你也想在 Redis 中存储任务的状态和返回值,你应该配置这些选项:

CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

Redis 结果后端支持的选项列表见 Redis backend settings

警示

  • 广播信息默认队所有虚拟主机可见。

    你需要设置一个传输选项来给消息加上前缀,这样消息只会被活动的虚拟主机收到:

    BROKER_TRANSPORT_OPTIONS = {'fanout_prefix': True}
    

    注意,你将不能与运行老版本的职程或没有启用这个选项的职程通信。

    这个选项在以后将会使默认的,迁移宜早不宜迟。

  • 如果任务没有在 可见性超时 内确认接收,任务会被重新委派给另一个职程并执行。

    这会在预计到达时间/倒计时/重试这些执行时间超出可见性超时时间的任务上导致问题;事实上如果超时,任务将循环重新执行。

    所以你需要增大可见性超时时间,以符合你计划使用的最长预计到达时间。

    注意 Celery 会在职程关闭的时候重新分派消息,所以较长的可见性超时时间只会造成在断电或强制终止职程之后“丢失”任务重新委派的延迟。

    周期任务不会受可见性超时影响,因为这是一个与预计到达时间/倒计时不同的概念。

    你可以配置同名的传输选项来增大这个时间:

    BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 43200}
    

    这个值必须是整数,单位是秒。

  • 监视事件(用于 flower 或其他工具)是全局的,并且不会受虚拟主机设置的影响。

    1这是 Redis 带来的限制。Redis PUB/SUB 信道是全局的,并且不受数据库序号影响。

  • Redis 在某些情况会从数据库中驱除键。

    如果你遇到了类似这样的错误:

    InconsistencyError, Probably the key ('_kombu.binding.celery') has been
    removed from the Redis database.

    你可以配置 Redis 服务器的 timeout 参数为 0 来避免键被驱逐。

celery结合redis 使用的更多相关文章

  1. Celery+python+redis异步执行定时任务

    我之前的一篇文章中写了[Celery+django+redis异步执行任务] 博文:http://blog.csdn.net/apple9005/article/details/54236212 你会 ...

  2. Python celery和Redis入门安装使用(排难帖)

    1.redis安装 下载地址 https://github.com/MicrosoftArchive/redis/releases,选择Redis-x64-3.2.100.msi5.8 MB下载就好了 ...

  3. Celery 和 Redis 入门

    Celery 是一个广泛应用于网络应用程序的任务处理系统. 它可以在以下情况下使用: 在请求响应周期中做网络调用.服务器应当立即响应任何网络请求.如果在请求响应周期内需要进行网络调用,则应在周期外完成 ...

  4. celery 任务队列 + redis

    Celery 是一个“自带电池”的的任务队列.它易于使用,所以你可以无视其所解决问题的复杂程度而轻松入门.它遵照最佳实践设计,所以你的产品可以扩展,或与其他语言集成,并且它自带了在生产环境中运行这样一 ...

  5. 微信管理系统基于Flask+Vue+Celery+SQLAlchemy+Redis等实现

    https://zhuanlan.zhihu.com/p/28102858 现在绝大多数同学都在使用微信,不过微信有很多限制,比如: 微信聊天记录只保存在本地,换个手机那些内容就找不到了 微信扫码加群 ...

  6. django使用celery搭配redis配置定时任务

    已经安装环境: Python3.6 django==2.1.8(用2.2.2需要升级sqlite3) 项目名称:ceshiproject   APP名称:ceshi 第一步:centos7下首先安装r ...

  7. Celery配置Redis数据库保存Return结果状态

    使用windows版本 1.于GitHUB下载https://github.com/ServiceStack/redis-windows Window版本,到路径: 2. 运行路径下:D:\redis ...

  8. django+celery+redis环境搭建

    初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...

  9. python 关于celery的异步任务队列的基本使用(celery+redis)【无配置文件设置】

    环境说明: window7 X64 python 2.7.6 .celery 3.1.25.redis 2.10.6 本地安装的redis服务端版本号:Redis-x64-3.2.100 工程结构说明 ...

随机推荐

  1. Java连接Hive使用Zookeeper的方式

    Java连接Hive的方式就是通过JDBC的方式来连接,URL为jdbc:hive2://host:port/db;principal=X@BIGDATA.COM等,这种方式是直接连接HiveServ ...

  2. Django 多数据库联用(同一个APP的models里不同class用不同数据库)

    很多网站有多数据库联用的文章,如自强学堂http://code.ziqiangxuetang.com/django/django-multi-database.html 大都只讲解如何让不同的app对 ...

  3. CentOS 7.3下使用yum安装MySQL

    CentOS 7的yum源中默认是没有mysql的,要先下载mysql的repo源. 1.下载mysql的repo源 $ wget http://repo.mysql.com/mysql-commun ...

  4. 【ABAP系列】SAP ABAP 开发中的SMARTFORMS 参数

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 开发中的SMA ...

  5. javascript 异常处理

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. C/C++ 内存模型

    C分为四个区:堆,栈,静态全局变量区,常量区 C++内存分为5个区域(堆栈全常代 ): 堆 heap : 由new分配的内存块,其释放编译器不去管,由我们程序自己控制(一个new对应一个delete) ...

  7. Dubbo原理学习

    Dubbo源码及原理学习 阿里中间件团队博客 Dubbo官网 Dubbo源码解析 Dubbo源码解析-掘金 Dubbo源码解析-赵计刚 Dubbo系列 源码总结+最近感悟

  8. 剑指Offer编程题(Java实现)——复杂链表的复制

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...

  9. MySQL服务意外停止

    先说一下,发现MySQL服务停了,启动就又好了,但是好奇服务意外停止的原因,所以看了一下MySQL的错误日志. 但是到底是哪个错误导致MySQL服务意外终止,还没有定论,故有了此篇文章,还望知道原因的 ...

  10. 创建MySQL数据库账号

    为本项目创建数据库用户(不再使用root账户) create user 账号 identified by '密码'; grant all on 数据库.* to '用户'@'%'; flush pri ...