celery理解

celery是典型的生产者+消费者的模式,生产者生产任务并加入队列中,消费者取出任务消费。多用于处理异步任务或者定时任务。

安装celery+redis

pip install -i https://pypi.douban.com/simple celery
pip install -i https://pypi.douban.com/simple redis

异步任务使用

1.基础使用

新建task.py文件

from celery import Celery

app = Celery('demo', backend='redis://localhost:6379/1', broker='redis://localhost:6379/2')

@app.task
def add(x, y):
return x + y

此时相当于注册了celery app

在项目文件目录下执行python交互式编程

>>> from task import add
>>> res = add.delay(3,5)
>>> res.ready()
False
>>> res.get()

此处相当于是生产者,生产任务并交给broker

  • 使用add.delay(3,5)异步处理add函数,或者使用add.apply_async((3,5))
  • res.ready()可以查看任务是否完成
  • res.get()任务如果完成,可以获得任务返回结果;否则,一直阻塞,直到任务完成,然后返回结果

在项目文件目录下创建worker消费任务

celery -A task worker --loglevel=info
  • task 为注册celery app的py文件名字
  • 注意celery版本不同命令不同的问题



    上面图片config中我们可以看到celery app名称以及broker和backend的设置

    并且这里立马消费了我们开始扔进redis的任务,可以回到我们的交互式编程查看结果已经被返回回来

    此时我们再扔进一个任务,可以看到结果可以马上返回
>>> res = add.delay(5,6)
>>> res.ready()
True
>>> res.get()
11
>>>

2.使用导入配置文件的方式

新建python包文件目录celery_study

在__init__.py文件中,我们注册celery app

from celery import Celery

app = Celery('demo')
# 通过celery实例获取配置
app.config_from_object('celery_study.celery_config')

新建配置文件celery_config.py

BROKER_URL = 'redis://localhost:6379/1'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/2' CELERY_TIMEZONE = 'Asia/Shanghai' CELERY_IMPORTS = (
'celery_study.task_add'
)

新建task_add.py文件书写需要异步的逻辑

import time
from celery_study import app @app.task
def add(x, y):
time.sleep(3)
return x + y

终端启动我们的worker

celery -A celery_study worker --loglevel=info



同样也可以看到celery正常启动

新建main.py文件并执行

from celery_study import task_add

task_add.add.delay(8, 4)
print('end...')

可以看到控制台输出了end...

在worker终端界面输出了

定时任务

修改celery_config.py

from datetime import timedelta
from celery.schedules import crontab CELERYBEAT_SCHEDULE = {
# 每10s执行一次
'task1': {
'task': 'celery_study.task_add.add',
'schedule': timedelta(seconds=10),
'args': (2, 8)
},
# 每天15:00执行
'task2': {
'task': 'celery_study.task_add.add',
'schedule': crontab(hour=15, minute=0),
'args': (9, 9)
}
}

添加定时任务

1.分别启动worker和beat

启动worker

celery -A celery_study worker --loglevel=info

启动定时任务配置

celery -A celery_study beat --loglevel=info

2.同时启动worker和beat

celery -A celery_study worker --beat --loglevel=info

celery+redis的使用(异步任务、定时任务)的更多相关文章

  1. celery(芹菜) 异步任务 定时任务 周期任务

    什么是celery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 celery架构 celery的架构由三部分组成,消息中间件(me ...

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

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

  3. django celery redis 定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

  4. django+celery+redis实现运行定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

  5. 日夕如是寒暑不间,基于Python3+Tornado6+APScheduler/Celery打造并发异步动态定时任务轮询服务

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_220 定时任务的典型落地场景在各行业中都很普遍,比如支付系统中,支付过程中因为网络或者其他因素导致出现掉单.卡单的情况,账单变成了 ...

  6. Celery+redis实现异步

    目录 Celery+redis实现异步 安装redis 安装celery-with-redis 添加celery相关配置 创建异步运行任务tasks.py 启动 Celery+redis实现异步 安装 ...

  7. Celery 源码解析四: 定时任务的实现

    在系列中的第二篇我们已经看过了 Celery 中的执行引擎是如何执行任务的,并且在第三篇中也介绍了任务的对象,但是,目前我们看到的都是被动的任务执行,也就是说目前执行的任务都是第三方调用发送过来的.可 ...

  8. 06: django+celery+redis

    目录: 1.1 Celery介绍 1.2 celery 组件 1.3 安装相关包 与 管理命令 1.4 celery与Django执行异步任务 1.5 在django中使用计划任务功能 1.1 Cel ...

  9. Celery + Redis 的探究

    Celery + Redis 的探究 文本尝试研究,使用 redis 作为 celery 的 broker 时,celery 的交互操作同 redis 中数据记录的关联关系. 不在乎过程的,可以直接看 ...

  10. python celery + redis

    redis http://debugo.com/python-redis celery http://docs.jinkan.org/docs/celery/getting-started/intro ...

随机推荐

  1. Vue前后端分离实现登录的一个简单demo

    1.建立一个Maven项目,并添加Spring相关依赖 2.编写Controller类相应的接口和配置类 LoginController类,编写接口的业务逻辑 package com.springbo ...

  2. UnoCSS 简化 CSS 的书写,Nice!

    CSS 样式太多,重复写 在学习 UnoCSS 之前,我提出几个问题: 你是否有过写完了 HTML 之后,跳转到 style 写 CSS 这样来回跳转的痛苦? 你是否有过不知道如何给节点取类名的痛苦( ...

  3. 《Effective C++》实现 章节

    Item26:尽可能延后变量定义式的出现时间 Item27:尽量少做转型动作 关于这一点,专门开了一个新的总结: http://blog.csdn.net/m0_37316917/article/de ...

  4. Objects非空判断-声明异常throws

    Objects非空判断 还记得我们学习过一个类Objects吗,曾经提到过它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant (容忍空指针的),那么在 ...

  5. 读Java8函数式编程笔记01_Lambda表达式

    1. Java 8函数式编程 1.1. 没有单子 1.2. 没有语言层面的惰性求值 1.3. 没有为不可变性提供额外支持 1.4. 集合类可以拥有一些额外的方法:default方法 2. 现实世界中, ...

  6. 药物警戒系统与EDI/Gateway/AS2

    药物警戒学在美国.日本.欧盟诸国等国家已经有数十年的历史,药物警戒的作用越来越收到各国监管部门的重视.随着我国药监管理政策的革新,药物警戒在药物研发.药品上市后监管领域的作用也越来越重要. 国外有两款 ...

  7. Node.js学习笔记----day05(在Node中操作MySQL)

    认真学习,认真记录,每天都要有进步呀!!! 加油叭!!! 一.安装 初始化项目 安装mysql(这里的mysql是node用来操作mysql的一个第三方包,包的名字就叫mysql) 安装mysql包的 ...

  8. 基于昇腾计算语言AscendCL开发AI推理应用

    摘要:本文介绍了昇腾计算语言AscendCL的基本概念,并以示例代码的形式介绍了如何基于AscendCL开发AI推理应用,最后配以实际的操作演示说明如何编译运行应用. 本文分享自华为云社区<基于 ...

  9. pytest基本使用指南

    注:关于pytest的基础要点个人已经总结好了, 一. 启动: 在主函数main下启动:pytest.main(['-q','test_demo.py']) 在命令行启动:pytest ./test_ ...

  10. JZOJ 5347. 【NOIP2017提高A组模拟9.5】遥远的金字塔

    题目 分析 毫无疑问 \(dp\) 设 \(f_{i,j}\) 表示选到第 \(i\) 层,已选 \(j\) 个矩阵最大覆盖面积 那么 \(f_{i,j}=\max{f_{l,j}+w_i*(i-l) ...