Celery工具
什么是Celery
Celery的功能
Celery是基于python实现的第三方组件,可以实现定时任务、周期任务等。
Celery的组成
Celery的角色
- 任务,创建或发布任务。
- 使用redis/rabbitMQ进行任务记录(broker)和任务返回结果(backend)的缓存。
- worker,主动执行任务,主公返回结果。
简单实例
from celery import Celery
import time
my_task = Celery(
"task",
broker = "redis://127.0.0.1:6379",
backend = "redis://127.0.0.1:6379",
)
@my_task
def func1(x,y):
time.sleep(15)
return x+y
from work import func1
from celery.result import AsyncResult
from work import my_task
res = func1.delay(2,4)
async_task = AsyncResult(
app = "my_task",
id = res.id,
)
if async_task.successiful():
result = async_task.get()
print(result)
else:
print("等待任务完成")
注意:如果是在windows平台使用celery需要下载eventlet
work的启动启动不是直接python work.py
,而是先celery worker -A work -l INFO -P eventlet
Celery的项目目录规范
在celery中,项目中需要一个文件夹,文件夹的名字没有强制规范,但是其中必须要有一个配置worker的名叫celery的文件。
celey.py实例
from celery import Celery
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"]
) #Celery_task是我定义的文件夹名
celery.py的同级文件还有将要运行的脚本,与文件夹同级的还有一个调用文件,用来调用不同任务。
此时使用celery就通过Celery文件夹进行启动。
celery worker -A Celery_task -l INFO -p eventlet -c 2
celery 默认启动五个线程,-c参数就是设置线程数的
Celery的定时任务和周期任务
celery的定时任务
celery的定时任务是通过apply_async来实现的,apply_async接受两个参数,一个是任务需要的参数,另一个是任务的定时时间,这里的时间指的是utc时间。
utc_time = datatime.datatime.utcfromtimestamp(time.time())
add_time = datatime.timedelta(second=2) #定时的时间
utc_time+=add_time
res = task_one.apply_async(args=(1,2),eta = utc_time)
celery的周期任务
周期任务就是周期性的生产出任务交给worker去执行,增加celery.py文件的内容如下。
from celery.schedules import crontab
celery_task.conf.beat_schedule = {
"ten_task":{
"task":"Celery_task.task_one.one", #这是目录
"schedule":crontab(hour=24),
"args":(2,4),
}
}
当我们使用celery实现周期任务时,不能直接创建worker,需要先创建创建任务的beat工厂。
celery beat -A Celery_task
Celery工具的更多相关文章
- Flask第三方工具组件介绍
flask-wtf组件flask-login组件flask-session组件flask-sqlalchemy组件flask-script组件flask-cache组件flask-assets组件fl ...
- 异步任务队列Celery在Django中的使用
前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...
- celery 框架
转自:http://www.cnblogs.com/forward-wang/p/5970806.html 生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据 ...
- Celery 框架学习笔记
在学习Celery之前,我先简单的去了解了一下什么是生产者消费者模式. 生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是 ...
- Celery,Tornado,Supervisor构建和谐的分布式系统
Celery 分布式的任务队列 与rabbitmq消息队列的区别与联系: rabbitmq 调度的是消息,而Celery调度的是任务. Celery调度任务时,需要传递参数信息,传输载体可以选择rab ...
- 使用Supervisor管理Celery进程。
讲过一篇celery的,但是celery启动后并不是daemon的,在生产环境中这肯定是不可以的,那怎么办呢? 这就需要使用supervisor进行进程管理了,下面详细介绍. 一. superviso ...
- celery简单应用
写作背景介绍 在celery简单入门中已经介绍了写作的背景,这篇文章主要是深入介绍celery的使用技巧.在实际的项目中我们需要明确前后台的分界线,因此我们的celery编写的时候就应该是分成前后台两 ...
- Linux进程管理工具——supervisor
介绍 Supervisord是用Python实现的一款非常实用的进程管理工具 安装 这里用源码 supervisor-.tar.gz .tar.gz cd supervisor- sudo pytho ...
- celery 入门
认识 这里有几个概念,task.worker.broker.顾名思义,task 就是老板交给你的各种任务,worker 就是你手下干活的人员. 那什么是 Broker 呢? 老板给你下发任务时,你需要 ...
随机推荐
- 一步一步理解 python web 框架,才不会从入门到放弃 -- 简单登录页面
上一节,我们基本了解了 Django 的一些配置,这一节,我们将通过一个简单的登录页面,进一步学习 Django 的使用. 新建项目 首先,新建一个 Django 项目,记得别弄错了哦. settin ...
- 对抗明文口令泄露 —— Web 前端慢 Hash
(更新:https://www.cnblogs.com/index-html/p/frontend_kdf.html ) 0x00 前言 天下武功,唯快不破.但在密码学中则不同.算法越快,越容易破. ...
- spring mvc+redis实现微信小程序登录
本文将详细的介绍微信小程序的登录流程以及在ssm框架下如何实现小程序用户登录 登录流程概要 主要的登录流程可以参考官方提供的一张流程图: 1.微信前台页面: 在微信版本更新之后,提高了安全机制,我们需 ...
- python导出zabbix数据并发邮件脚本
Zabbix没有报表导出的功能,于是通过编写脚本导出zabbix数据并发邮件.效果如下: 下面是脚本,可根据自己的具体情况修改: #!/usr/bin/python #coding:utf-8 imp ...
- 『线段树 Segment Tree』
更新了基础部分 更新了\(lazytag\)标记的讲解 线段树 Segment Tree 今天来讲一下经典的线段树. 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间 ...
- 学习笔记02(随便看看mybatis源码)
两个很有名的持久层hibernate和mybatis应该很熟悉不过了,两者最大相同点是底层都是对jdbc的封装,最大的不同点是前者是自动生成sql语句,后者是需要我们在映射文件中写出sql. 其实从以 ...
- CSharpGL(46)用Billboard绘制头顶文字
CSharpGL(46)用Billboard绘制头顶文字 本文介绍CSharpGL用Billboard绘制头顶文字的方法.效果如下图所示. 下载 CSharpGL已在GitHub开源,欢迎对OpenG ...
- 8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署
这一篇继续完善webnotebook,如果你读过上一篇的内容,你应该知道怎么去挂载webnotebook日志和容器的远程访问,但是这些还远不够,webnotebook 总要和一些数据库打交道吧,比如说 ...
- 一次apk打开时报内存溢出错误,故写下内存溢出的各种原因和解决方法
原转载:https://blog.csdn.net/cp_panda_5/article/details/79613870 正文内容: 对于JVM的内存写过的文章已经有点多了,而且有点烂了,不过说那么 ...
- Git:一、简介&安装Git 2.20.1
0.Git官网 1.简介 一个分布式版本控制系统. 作用:自动记录每次文件的改动,还可以让同伴协作编辑. 分布式与集中式相比优点在于:版本库在每个人自己电脑上,不需要一直在网上,也不用担心某一个数据库 ...