Tag: celery
Python 异步任务模块 Celery 快速上手 (二)
Python 异步任务模块 Celery 快速上手 (一)
基本使用
第一步,建立一个celery类的对象,传入一个名称(后续需要这个名称来执行异步任务), 配置消息代理,这里配置了本地redis服务器的第0个数据库
"""
tasks.py
"""
from celery import Celery
celery_app = Celery('name', broker='redis://localhost:6379/0')
那这样就可以通过task
装饰器来建立一个简单的异步任务了
"""
tasks.py
"""
import time
@celery_app.task
def task_name(someone):
time.sleep(5)
print('hello {}'.format(someone))
建立好异步任务之后,可以在外部调用这个任务
from tasks import task_name
# 任务用过delay方法可以传入参数,方法执行后并不会阻塞后续代码
task_name.delay('task')
print('start running!')
# 也可以不立即执行,可以先用s方法传入参数
task_name.s('task')
print('start running!')
task_name.delay()
对了执行celery命令celery -A name worker
, 执行后注册的任务会在console里面输出
数据持久化
想要delay的函数返回的结果就需要在建立celery对象中加入一个backend
参数
"""
tasks.py
"""
from celery import Celery
celery_app = Celery('name', broker='redis://localhost:6379/0', backend='redis://localhost:6379/1')
建立一个任务带返回数据功能的
"""
tasks.py
"""
import time
@celery_app.task
def say_hello(to):
time.sleep(5)
return "Hello {}".format(to)
通过ready()
方法可以获取任务是否完成,而get()
可以获取任务返回结果
from tasks import say_hello
import time
t = say_hello('hello')
while True:
r = t.ready()
if not r:
print("task done? {}".format(r))
continue
print('task done: {}'.format(t.get()))
break
下一篇详细讲讲Celery的Task类