博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Celery 之异步任务、定时任务、周期任务
阅读量:4306 次
发布时间:2019-06-06

本文共 2446 字,大约阅读时间需要 8 分钟。

什么是Celery?

Celery 是芹菜
Celery 是基于Python实现的模块, 用于执行异步定时周期任务的
其结构的组成是由
    1.用户任务 app
    2.管道 broker 用于存储任务 官方推荐 redis rabbitMQ  / backend 用于存储任务执行结果的
    3.员工 worker

 

一 异步任务

1 from celery import Celery 2 import time 3  4 my_task = Celery('tasks', broker='redis://127.0.0.1:6379', backend='redis://127.0.0.1:6379') 5  6  7 @my_task.task 8 def func(x, y): 9     time.sleep(20)10     return x + y
s1
1 from s1 import func2 3 ret = func.delay(2, 4)4 5 sid = ret.id6 print(ret.id)
s2
1 from celery.result import AsyncResult 2 from asyn.s1 import my_task 3  4 async_task = AsyncResult(id="8789dd69-437a-47c2-a3a5-1cd5c3ba9c73", app=my_task) 5  6 if async_task.successful(): 7     result = async_task.get() 8     print(result) 9 10 else:11     print('任务还未完成')
s3

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

 celery worker -A s1 -l INFO -P eventlet  # 创建worker 执行代码

二、周期任务

创建两个任务

task_one:

1 from s6 import celery_task2 3 4 @celery_task.task5 def my_func1_task_one(a,b):6     return f"my_func1_task_one return{a}{b}"
View Code

task_two

1 from s6 import celery_task2 3 4 @celery_task.task5 def my_func1_task_two(a, b):6     return f"my_func1_task_one return{a}{b}"
View Code

设置执行周期时间

1 # 周期任务 2  3 from celery import Celery 4 from celery.schedules import crontab 5  6 celery_task = Celery("task", 7                      broker="redis://127.0.0.1:6379", 8                      backend="redis://127.0.0.1:6379", 9                      include=["task_one","task_two"])10 11 #我要要对beat任务生产做一个配置,这个配置的意思就是每10秒执行一次Celery_task.task_one任务参数是(10,10)12 celery_task.conf.beat_schedule ={13     "each10s_task": {14         "task":"task_one.my_func1_task_one",15         "schedule": 10,  # 每10秒钟执行一次16         "args": (10, 20)17     },18     "each5s_task": {19         "task": "task_two.my_func1_task_two",20         "schedule": 5,  # 每5秒21         "args": (50, 60)22     },23     # "each24hours_task": {
24 # "task": "Celery_task.task_one.one",25 # "schedule": crontab(hour=24), # 每24小时执行一次26 # "args": (10, 10)27 # }28 29 }30 31 #以上配置完成之后,还有一点非常重要32 # 不能直接创建Worker了,因为我们要执行周期任务,所以首先要先有一个任务的生产方33 # celery beat -A Celery_task34 # celery worker -A Celery_task -l INFO -P eventlet
View Code

执行指令:

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

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

2、celery worker -A Celery_task -l INFO -P eventlet

 

转载于:https://www.cnblogs.com/liaopeng123/p/10395855.html

你可能感兴趣的文章
Could not find a storyboard named 'Main' in bundle NSBundle
查看>>
CocoaPods安装和使用教程
查看>>
Beginning Auto Layout Tutorial
查看>>
block使用小结、在arc中使用block、如何防止循环引用
查看>>
iPhone开发学习笔记002——Xib设计UITableViewCell然后动态加载
查看>>
iOS开发中遇到的问题整理 (一)
查看>>
Swift code into Object-C 出现 ***-swift have not found this file 的问题
查看>>
为什么你的App介绍写得像一坨翔?
查看>>
RTImageAssets插件--@3x可自动生成@2x图片
查看>>
iOS开发的一些奇巧淫技
查看>>
常浏览的博客和网站
查看>>
Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
查看>>
iOS在Xcode6中怎么创建OC category文件
查看>>
5、JavaWeb学习之基础篇—标签(自定义&JSTL)
查看>>
8、JavaWEB学习之基础篇—文件上传&下载
查看>>
reRender属性的使用
查看>>
href="javascript:void(0)"
查看>>
h:panelGrid、h:panelGroup标签学习
查看>>
f:facet标签 的用法
查看>>
<h:panelgroup>相当于span元素
查看>>