一.什么是Celery?

  中文名翻译为芹菜,是flask中处理异步定时周期任务的第三方组件

二.基本结构
  1.需要跑的任务代码app

  2.用管道broker与用于存储任务(就是个缓存)  工具一般用redis  或者用rabbitMQ(兔子)

  3.执行任务的人worker

简单实例 首先建立三个文件分别写入一下代码

from celery import Celery
import time #创建一个Celery实例,这就是我们用户的应用app
my_task = Celery("tasks", broker="redis://127.0.0.1:6379", backend="redis://127.0.0.1:6379") # 为应用创建任务,func1
@my_task.task
def func1(x, y):
time.sleep()
return x + y s1.py

s1

from s1 import func1

# 将任务交给Celery的Worker执行
res = func1.delay(,) #返回任务ID
print(res.id) s2.py

s2

from celery.result import AsyncResult
from s1 import my_task # 异步获取任务返回值
async_task = AsyncResult(id="31ec65e8-3995-4ee1-b3a8-1528400afd5a",app=my_task) # 判断异步任务是否执行成功
if async_task.successful():
#获取异步任务的返回值
result = async_task.get()
print(result)
else:
print("任务还未执行完成") s3.py

s3

s1就是前面提到的worker

启动:Windows:这里需要注意的是celery 4.0 已经不再对Windows操作系统提供支持了,也就是在windows环境下出现问题除非自己解决,否贼官方是不会给你解决的

 celery worker -A s1 -l INFO -P eventlet

ps: eventlet 是一个python的三方库 需要使用 pip安装 pip install eventlet

执行过程:

启动完成,其实在s1.py当中,worker已经知道了自己的broker 和 backend 在哪里了
接下来就让异步任务开始执行吧,对了 s2.py 中就是使用 delay 的方式来开始执行的异步任务
执行 s2.py 得到了一个字符串 55a84ea3-afa4-4ab9-8650-40e156c07441 这个字符串儿就是异步任务的ID
在Celery worker 的控制台中可以看到这个样子

等待15秒钟之后就可以的到这样一个字符串

然后通过s3.py修改异步任务的ID来获取任务返回的结果

这样就简单完成了一个Celery异步任务了

以下任务模板:

在实际项目中我们应用Celery是有规则的

要满足这样的条件才可以哦,目录Celery_task这个名字可以随意起,但是一定要注意在这个目录下一定要有一个celery.py这个文件

三.Celery定时任务

from Celery_task.task_one import one
from Celery_task.task_two import two # one.delay(,)
# two.delay(,) # 定时任务我们不在使用delay这个方法了,delay是立即交给task 去执行
# 现在我们使用apply_async定时执行 #首先我们要先给task一个执行任务的时间
import datetime,time
# 获取当前时间 此时间为东八区时间
ctime = time.time()
# 将当前的东八区时间改为 UTC时间 注意这里一定是UTC时间,没有其他说法
utc_time = datetime.datetime.utcfromtimestamp(ctime)
# 为当前时间增加 秒
add_time = datetime.timedelta(seconds=)
action_time = utc_time + add_time # action_time 就是当前时间未来10秒之后的时间
#现在我们使用apply_async定时执行
res = one.apply_async(args=(,),eta=action_time)
print(res.id)
#这样原本延迟5秒执行的One函数现在就要在10秒钟以后执行了 my_celery

任务代码

四.Celery周期任务

from celery import Celery
from celery.schedules import crontab celery_task = Celery("task",
broker="redis://127.0.0.1:6379",
backend="redis://127.0.0.1:6379",
include=["Celery_task.task_one","Celery_task.task_two"]) #我要要对beat任务生产做一个配置,这个配置的意思就是每10秒执行一次Celery_task.task_one任务参数是(,)
celery_task.conf.beat_schedule={
"each10s_task":{
"task":"Celery_task.task_one.one",
"schedule":, # 每10秒钟执行一次
"args":(,)
},
"each1m_task": {
"task": "Celery_task.task_one.one",
"schedule": crontab(minute=), # 每一分钟执行一次
"args": (, )
},
"each24hours_task": {
"task": "Celery_task.task_one.one",
"schedule": crontab(hour=), # 每24小时执行一次
"args": (, )
} } #以上配置完成之后,还有一点非常重要
# 不能直接创建Worker了,因为我们要执行周期任务,所以首先要先有一个任务的生产方
# celery beat -A Celery_task
# celery worker -A Celery_task -l INFO -P eventlet celery.py

周期代码

执行过程:

创建Worker的方式并没有发行变化,但是这里要注意的是,每间隔一定时间后需要生产出来任务给Worker去执行,这里需要一个生产者beat

celery beat -A Celery_task  #创建生产者 beat 你的 schedule 写在哪里,就要从哪里启动

celery worker -A Celery_task -l INFO -P eventlet

创建worker之后,每10秒就会由beat创建一个任务给Worker去执行

Flask- celery (芹菜)的更多相关文章

  1. flask celery 使用方法

    一.安装 由于celery4.0不支持window,如果在window上安装celery4.0将会出现下面的错误flask_clery 你现在只能安装pip install celery==3.1 二 ...

  2. Flask实战第67天:Flask+Celery实现邮件和短信异步发送

    之前在项目中我们发送邮件和 短信都是阻塞的,现在我们来利用Celery来优化它们 官方使用文档: http://flask.pocoo.org/docs/1.0/patterns/celery/ re ...

  3. [Flask]celery异步任务队列的使用

    Celery异步任务队列 目录结构树: 配置文件config.py: # 设置中间人地址 broker_url = 'redis://127.0.0.1:6379/1' 主main.py: impor ...

  4. flask + celery实现定时任务和异步

    参考资料: Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest ...

  5. Flask 与 Celery 在 windows 下的集成问题

    Flask 与 Celery 在 windows 下的集成问题 所有的 Web 框架内部的视图中不适合执行需要长时间运行的任务,包括 Flask .Django 等.这类型的任务会阻塞 Web 的响应 ...

  6. 【译】在Flask中使用Celery

    为了在后台运行任务,我们可以使用线程(或者进程). 使用线程(或者进程)的好处是保持处理逻辑简洁.但是,在需要可扩展的生产环境中,我们也可以考虑使用Celery代替线程.   Celery是什么? C ...

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

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

  8. Python中任务队列-芹菜celery的使用

    一.关于celery 芹菜celery是一个python实现的异步任务队列,可以用于爬虫.web后台查询.计算等等.通过任务队列,当一个任务来临时不再傻傻等待. 他的架构如下: Broker 我们的生 ...

  9. Python 并行分布式框架 Celery

    Celery 简介 除了redis,还可以使用另外一个神器---Celery.Celery是一个异步任务的调度工具. Celery 是 Distributed Task Queue,分布式任务队列,分 ...

  10. 分布式框架Celery(转)

    一.简介 Celery是一个异步任务的调度工具. Celery 是 Distributed Task Queue,分布式任务队列,分布式决定了可以有多个 worker 的存在,队列表示其是异步操作,即 ...

随机推荐

  1. vue中如何开发插件

    1.vue中提供了install方法用来开发插件 官方:Vue.js 的插件应该有一个公开方法 install.这个方法的第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象. 2.我的插件目 ...

  2. drop与truncate与delete的区别与联系

    在mysql和oracle数据库中delete与truncate都是可以用来对数据进行删除操作,但是二者又有些不同. 主要有以下几个区别: 区别一: 根据sql语言分类来说,delete属于DML语言 ...

  3. MySQL之常用SQL语句

    1) 分表之后统计数据的总量 SELECT (a0.total + a1.total + a2.total + a3.total + a4.total + a5.total + a6.total + ...

  4. 魔术矩阵Java代码

    //该魔术矩阵默认从右上角45度递增 //@漫流——595128841在qq点com //import java.util.Arrays; //用于打印API函数 public class 魔方矩阵 ...

  5. [易学易懂系列|rustlang语言|零基础|快速入门|(13)|Generics泛型]

    [易学易懂系列|rustlang语言|零基础|快速入门|(13)] 有意思的基础知识 Generics泛型 我们今天来看看泛型. 什么是泛型? 我们来看看这样的情景: 我们要写一个函数,这个函数可以处 ...

  6. [易学易懂系列|rustlang语言|零基础|快速入门|(3)|所有权Ownership]

    今天我们来讲讲rust最难,也是最重要的概念: Ownership,Borrowing,Lifetimes 首先我们来看看:ownership(所有权) 我们来看看下面的代码: let a = [1, ...

  7. 洛谷P5055 可持久化文艺平衡树 (可持久化treap)

    题目链接 文艺平衡树的可持久化版,可以使用treap实现. 作为序列使用的treap相对splay的优点如下: 1.代码短 2.容易实现可持久化 3.边界处理方便(splay常常需要在左右两端加上保护 ...

  8. 【BZOJ1999】树网的核

    题目大意:题目过长,无法简单描述... 题解: 由于树网的核一定是树直径的一段,因此考虑先将直径取出,通过两次 BFS 即可.要求的东西是树上任意一点到这条取出的线段的距离的最大值,发现这个最大值有可 ...

  9. 【30分钟学完】canvas动画|游戏基础(extra1):颜色那些事

    前言 本篇主要讲解关于计算机颜色系统的概念,后续结合一些canvas的应用.因为是"你不知道也没关系"的边缘知识,所以作为本系列教程的扩展,没有兴趣的同学可以跳过. 开始我们万紫千 ...

  10. 【30分钟学完】canvas动画|游戏基础(7):动量守恒与多物体碰撞

    前言 一路沿着本系列教程学习的朋友可能会发现,前面教程中都尽量避免提及质量的概念,很多运动概念也时刻提醒大家这不是真实的物体运动.因为真实的物体运动其实跟质量都是密不可分的,而且质量的引入自然必须提及 ...