Celery(异步任务,定时任务,周期任务)
1.什么是Celery
Celery是基于Python实现的模块,用于异步、定时、周期任务的。
组成结构:
1.用户任务 app
2.管道broker 用于存储任务 官方推荐 redis/rabbitMQ backend 用于存储任务执行结果的
3.员工 worker
2.Celery的异步
from celery import Celery
import time # 创建一个Celery实例,这就是我们用户的应用app
my_task = Celery("task", broker="redis://127.0.0.1:6379", backend="redis://127.0.0.1:6379") # 为应用创建任务,func1,2,3
@my_task.task
def my_func1(a, b):
time.sleep(20)
return f"my_func1 return{a}{b}" @my_task.task
def my_func2():
return "my_func2" @my_task.task
def my_func3():
return "my_func3"
s1
from s1 import my_func1 res = my_func1.delay(2, 3) # 将任务交给Celery的worker执行
print(res) # 返回任务id
s2
from celery.result import AsyncResult
from s1 import my_task # 异步获取任务返回值
async_task = AsyncResult(id="9777deca-d808-4cf1-a985-508690c32250", app=my_task)
# result = async_task.get()
# print(result) # 判断异步任务是否执行成功
if async_task.successful():
result = async_task.get()
print(result)
else:
print("任务还未执行完成")
s3
根据操作系统的不同,启动方式也存在差异:
Linux - celery worker -A s1 -l INFO
Windows:这里需要注意的是celery 4.0 已经不再对Windows操作系统提供支持了,也就是在windows环境下出现问题除非自己解决,否贼官方是不会给你解决的
Windows - celery worker -A s1 -l INFO -P eventlet
ps: eventlet 是一个python的三方库 需要使用 pip安装 pip install eventlet
ps
3.Celery的目录
在实际项目中我们应用Celery是有规则的

要满足这样的条件才可以哦,目录Celery_task这个名字可以随意起,但是一定要注意在这个目录下一定要有一个celery.py这个文件
4.Celery的定时
from Celery_task.task_one import one
from Celery_task.task_two import two # one.delay(10,10)
# two.delay(20,20) # 定时任务我们不在使用delay这个方法了,delay是立即交给task 去执行
# 现在我们使用apply_async定时执行 #首先我们要先给task一个执行任务的时间
import datetime,time
# 获取当前时间 此时间为东八区时间
ctime = time.time()
# 将当前的东八区时间改为 UTC时间 注意这里一定是UTC时间,没有其他说法
utc_time = datetime.datetime.utcfromtimestamp(ctime)
# 为当前时间增加 10 秒
add_time = datetime.timedelta(seconds=10)
action_time = utc_time + add_time # action_time 就是当前时间未来10秒之后的时间
#现在我们使用apply_async定时执行
res = one.apply_async(args=(10,10),eta=action_time)
print(res.id)
#这样原本延迟5秒执行的One函数现在就要在10秒钟以后执行了 my_celery
5.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任务参数是(10,10)
celery_task.conf.beat_schedule={
"each10s_task":{
"task":"Celery_task.task_one.one",
"schedule":10, # 每10秒钟执行一次
"args":(10,10)
},
"each1m_task": {
"task": "Celery_task.task_one.one",
"schedule": crontab(minute=1), # 每一分钟执行一次
"args": (10, 10)
},
"each24hours_task": {
"task": "Celery_task.task_one.one",
"schedule": crontab(hour=24), # 每24小时执行一次
"args": (10, 10)
} } #以上配置完成之后,还有一点非常重要
# 不能直接创建Worker了,因为我们要执行周期任务,所以首先要先有一个任务的生产方
# celery beat -A Celery_task
# celery worker -A Celery_task -l INFO -P eventlet celery.py
Celery(异步任务,定时任务,周期任务)的更多相关文章
- Celery 异步任务 , 定时任务 , 周期任务 的芹菜
1.什么是Celery?Celery 是芹菜Celery 是基于Python实现的模块, 用于执行异步定时周期任务的其结构的组成是由 1.用户任务 app 2.管道 broker 用于存储 ...
- Celery - 异步任务 , 定时任务 , 周期任务
1.什么是Celery?Celery 是芹菜Celery 是基于Python实现的模块, 用于执行异步定时周期任务的其结构的组成是由 1.用户任务 app 2.管道 broker 用于存储 ...
- Celery - 一个懂得 异步任务 , 定时任务 , 周期任务 的芹菜
1.什么是Celery?Celery 是芹菜Celery 是基于Python实现的模块, 用于执行异步定时周期任务的其结构的组成是由 1.用户任务 app 2.管道 broker 用于存储 ...
- celery(芹菜) 异步任务 定时任务 周期任务
什么是celery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 celery架构 celery的架构由三部分组成,消息中间件(me ...
- celery异步任务 定时任务
以前项目中用到过 celery ,但是没怎么记笔记,现在在记一下,方便以后用. Celery.png 问:Celery 是什么? 答:Celery 是一个由 Python 编写的简单.灵活.可靠的 ...
- django —— Celery实现异步和定时任务
1. 环境 python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Bro ...
- Celery+python+redis异步执行定时任务
我之前的一篇文章中写了[Celery+django+redis异步执行任务] 博文:http://blog.csdn.net/apple9005/article/details/54236212 你会 ...
- celery异步任务、定时任务
阅读目录 一 什么是Celery? 二 Celery的使用场景 三 Celery的安装配置 四 Celery异步任务 五Celery定时任务 六在Django中使用Celery 一 什么是Cele ...
- 日夕如是寒暑不间,基于Python3+Tornado6+APScheduler/Celery打造并发异步动态定时任务轮询服务
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_220 定时任务的典型落地场景在各行业中都很普遍,比如支付系统中,支付过程中因为网络或者其他因素导致出现掉单.卡单的情况,账单变成了 ...
- celery异步任务框架
目录 Celery 一.官方 二.Celery异步任务框架 Celery架构图 消息中间件 任务执行单元 任务结果存储 三.使用场景 四.Celery的安装配置 五.两种celery任务结构:提倡用包 ...
随机推荐
- suanec-rotatelogs
简介 一个简单的日志滚动器 业界已有大量优秀的日志滚动工具来限制日志大小 本工具只是仿制了Apache httpd中的rotatelogs 不同的是,工作模式参考了yarn namenode日志的管理 ...
- FastJson 对json中的KEY值的大小写转换方法
/** * json大写转小写 * * @return JSONObject */ public static JSONObject transToLowerObject(String json) { ...
- [Arch] 域名解析常用两步设置
主站 A 记录 (对应IPv4) 主机记录: @ (表示解析到不带 www 主域名) 值为 IP 主站 CNAME 记录 (表示别名) 主机记录: www (表示解析到带 ...
- Java Web 应用概述
1.java Web 应用是建立在java语言基础上的企业web应用系统,oracle公司根据行业发展和便于开发制定了一套规范:Java EE规范,截至到当前(2016.3.11)是java EE7规 ...
- 使用Android手机进行开发的尝试
使用Android手机查看和修改Excel文件.PowerPoint文件并连接幻灯机进行演示等办公方式想必大家已经有所了解.今天介绍一下怎样使用Android进行软件开发. Termux 使用Andr ...
- 理解 Node.js 的 GC 机制
<深入浅出Node.js>第五章<内存控制>阅读笔记 随着 Node 的发展,JavaScript 的应用场景早已不再局限在浏览器中.本文不讨论网页应用.命令行工具等短时间执行 ...
- Appium 中使用 pressKeyCode 方法不起作用也没有报错
为了使 appium 支持 Android 系统 7 及以上,automationName 使用了 UIAutomator2.但是发现,使用androidDriver.pressKeyCode(And ...
- SQL2014做数据库主从镜像备份(也可以用于高可用)备忘(非域控)。
部份内容参考原始文章链接:https://www.cnblogs.com/stragon/p/5643754.html ,同时比较有参考价值的文章:https://blog.csdn.net/sqls ...
- Python 入门(1):hello world 到流程控制
1.hello world 在D:\python\目录下新建文件hello.txt,编写代码如下 print("hello world!") 修改后缀名为.py,执行hello.p ...
- SQLite接口函数 - C核心api实践与总结
SQLite核心源代码由C语言写就,同时提供了很多的扩展包可应用于其他编程语言和类库,如Python.Ruby.Java.Perl..Net/C#.Qt和ODBC.在很多情况下,针对一种语言有很多扩展 ...