celery 的简单实例
from celery import Celery import time #创建一个Celery实例,这就是我们用户的应用app my_task = Celery("tasks", broker="redis://127.0.0.1:6379", backend="redis://127.0.0.1:6379") # 为应用创建任务,func1 @my_task.task def func1(x, y): time.sleep(15) return x + y
from s1 import func1 # 将任务交给Celery的Worker执行 res = func1.delay(2,4) #返回任务ID print(res.id)
from celery.result import AsyncResult from s1 import my_task # 异步获取任务返回值 async_task = AsyncResult(id="31ec65e8-3995-4ee1-b3a8-1528400afd5a",app=my_task) # 判断异步任务是否执行成功 if async_task.successful(): #获取异步任务的返回值 result = async_task.get() print(result) else: print("任务还未执行完成")
最终要执行的任务是在s1.py中,也就是worker需要执行的任务,所以worker就是s1.py
启动方式:
linux: celery worker -A s1 -l INFO
windows: celery worker -A s1 -l INFO -P eventlet(eventlet是第三方库,需要安装)
启动完成后,在s2中就是使用delay的方式来开始执行的异步任务,执行se得到了一个字符串,这个字符串就是异步任务的ID,然后再s3修改异步任务的ID来获取任务返回的结果.
celery周期任务
首先要对celery_task中的celery.py进行修改
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
每间隔一定时间后需要生产出来任务给worker去执行,这里需要一个生产者beat
celery beat -A celery_task 创建生产者beat