Celery 之异步任务、定时任务、周期任务

什么是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 func
2 
3 ret = func.delay(2, 4)
4 
5 sid = ret.id
6 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_task
2 
3 
4 @celery_task.task
5 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_task
2 
3 
4 @celery_task.task
5 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_task
34 # 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值