使用 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. virtualbox压缩虚拟机硬盘文件vhd

    命令如下: VBoxManage modifyhd D:\pc1\pc1.vhd  --compact 当提示以下内容时,将整个虚拟机文件夹拷贝盘符根目录下,将[D:\pc1\pc1.vhd]改为相应 ...

  2. vim加脚本注释和文本加密

    vim /etc/vimrc 一.李导版本 autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()" fun ...

  3. 应用安全 - 工具 | 数据库 - redis - 漏洞 - 汇总

    未授权访问 Date 类型 未授权访问导致getshell 影响范围 复现 (1)shell反弹 (2)结合SSH服务 (3)结合web服务 分析

  4. python 并发编程 多进程 互斥锁与join区别

    互斥锁与join 互斥锁和join都可以把并发变成串行 以下代码是用join实现串行 from multiprocessing import Process import time import js ...

  5. 如何查看SQL Server某个存储过程的执行历史【转】

    db_name(d.database_id) as DBName, s.name as 存储名称, s.type_desc as 存储类型, d.cached_time as SP添加到缓存的时间, ...

  6. java 异常体系详细介绍

    一.异常概述与异常体系结构 异常:在Java语言中,将程序执行中发生的不正常情况称为"异常".(开发过程中的语法错误和逻辑错误不是异常). Java把异常当作对象来处理,并定义一个 ...

  7. IDEA在resources下创建多级目录

    在resource下,创建多级目录,应在每个目录之间用"/"隔开,这样就不需要再手动一层层目录的分别添加了!

  8. Luogu P1864 [NOI2009]二叉查找树

    题目 \(v\)表示权值,\(F\)表示频率. 首先我们显然可以把这个权值离散化. 然后我们想一下,这个东西它是一棵树对吧,但是我们改变权值会引起其树形态的改变,这样很不好做,所以我们考虑把它转化为序 ...

  9. 使用git命令删除branch

    使用git删除server上的一个branch注意事项: 1. 使用命令:git push origin –delete 分支名 (分支名称需要去掉origin,如果有),   git branch ...

  10. 剑指offer-用两个栈实现队列-栈和队列-python

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.   # -*- coding:utf-8 -*- class Solution: def __init_ ...