Celery在python中的单独使用
简单使用:
1.目录结构
-app_task.py
-worker.py
-result.py
2.在需要进行异步执行的文件app_task.py中导入celery,并实例化出一个对象,传入消息中间和数据存储配置参数
broker = 'redis://127.0.0.1:6379/1' # 使用redis第一个库 backend = 'redis://127.0.0.1:6379/2' # 使用redis第二个库 cel = celery.Celery('test',broker=broker,backend=backend)
3.在需要进行异步执行的函数上添加装饰器
@cle.task def add(x,y): return x+y
4.新建文件worker.py用来添加任务
from app_task import add result = add.delay(4,2) print(result) # 此结果不是add执行结果,而是放入消息队列中的一个任务id
5.新建文件result.py用来接收结果
from celery.result import AsyncResult from app_task import cel # 2e76b24d-364f-46b7-a0eb-f69f663dfb0d async1 = AsyncResult(id="56db7832-d0f4-4b9b-ba92-4fb08d0f9592", app=cel) # id处放置消息队列中任务的id if async1.successful(): # 判断执行任务成功 result = async1.get() print(result) # result.forget() # 将结果删除 elif async1.failed(): print('执行失败') elif async1.status == 'PENDING': print('任务等待中被执行') elif async1.status == 'RETRY': print('任务异常后正在重试') elif async1.status == 'STARTED': print('任务已经开始被执行')
6.添加任务+启动工人+查看结果
1.运行worker.py
2.终端中输入命令:celery worker -A app_task -l info -P eventlet # 其中app_task为配置参数的文件名
3.运行result.py查看结果
多任务使用:
1.目录结构,将简单使用中的app_task改为一个celery_task文件夹,其中放至少两个文件:celery.py(名字固定)/task1.py(方具体任务的文件)/根据需求放置其他任务文件
-celery_task
-celery.py # 配置参数
-task1.py # 任务文件,根据需求添加
-task2.py
...
-worker.py # 添加任务
-result.py # 查看结果
2.在任务文件task1.py中导入cel,并以装饰器形式加在函数上
from .celery import cel @cel.task def mul(x,y): return x*y
3.celery.py中配置参数
from celery import Celery cel = Celery( 'celery_demo', backend = 'redis://127.0.0.1:6379/1', broker = 'redis://127.0.0.1:6379/2', include=['celery_task.task1','celery_task.task2'] ) cel.conf.timezone = 'Asia/Shanghai' cel.conf.enable_utc = False
4.worker.py和简单使用中的相同
5.result.py与简单使用中的相同
6.添加任务+启动工人+查看结果
1.运行worker.py
2.终端中输入命令:celery worker -A celery_task -l info -P eventlet # 其中celery_task为文件夹名
3.运行result.py查看结果
延时任务:
1.目录结构
-celery_task
-celery.py
-task1.py
-task2.py
...
-worker.py
-result.py
2.task1.py与多任务相同
3.celery.py与多任务相同
4.worker.py中将传入的时间改为指定时间
ctime = datetime.now() # 当前时间 utc_time = datetime.utcfromtimestamp(ctime.timestamp()) # 转成本地时间 time_delta = timedelta(seconds=30) # 设置延时30s task_time = utc_time+time_delta # 设定时间点为30s后 ret1 = add.apply_async(args=[2,3],eta=task_time)
5.result.py与简单使用中的相同
6.与多任务相同
定时任务:
1.目录结构,去掉worker.py,添加任务变为在终端输入命令
-celery.py
-celery.py
-task1.py
-task2.py
...
-result.py
2.task1.py与多任务相同
3.celery.py中与定时任务相比,添加下面参数
1.设定时间间隔,循环执行
cel.conf.beat_schedule = { 'add-every-10-seconds':{ # 名字随意起 'task': 'celery_task.task1.mul', # 指定要执行的任务 'schedule': timedelta(seconds=2), # 指定时间间隔 'args': (2,3) # 传入参数 } }
2.指定年月日具体时间,循环执行
from celery.schedules import crontab cel.conf.beat_schedule = { 'add-every-10-seconds':{ 'task': 'celery_task.task1.mul', 'schedule': crontab(minute=28,hour=2,day_of_month=23,month_of_year=6), 'args': (6,3) } }
4.没有worker.py
5.result.py与简单使用中的相同
6.添加任务+启动工人+查看结果
1.启动一个终端,输入:celery beat -A celery_task -l info # celery_task为文件夹名
2.再启动一个终端,输入:celery worker -A celery_task -l info -P eventlet
3.运行result.py查看结果
原文地址:https://www.cnblogs.com/gyk1030/p/11677164.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Day3.判断&循环语句
- Day2.不就是运算符吗!
- Apache Kylin VS Apache Doris
- 「R」绘制分组排序点图
- 初识ABP vNext(8):ABP特征管理
- C++实现epoll echo服务器
- 相关性 ≠ 因果性,用图的方式打开因果关系
- 斗转星移 | 三万字总结Kafka各个版本差异
- Hadoop支持Lzo压缩配置及案例
- Spark SQL快速入门系列之Hive
- 手把手学机器学习算法中数据预处理(附代码)
- 「Workshop」第十六期:Pandas 使用介绍
- .net core学习笔记,组件篇:服务的注册与发现(Consul)初篇
- Android程序员想进大厂?算法很重要!2020年必学的 10 大算法关注一下
- PWN:Largebin Attack