celery是分布式任务处理模块,可以实现异步和定时任务。由5大部分组成,但是celery的broker不提供存储,需要其他存储方法,如用redis rabbitmq等等。
新版需要安装下面两个
pip install celery
pip install eventlet
下面是一个简单的demo
# single-simple-demo.py 的内容
from celery import Celery
my_task = Celery(main='single-simple-demo' # 要和文件的名字一致,是task名字的一部分
, broker='redis://localhost:6379/0' # 存储接收任务的数据库或mq
, backend='redis://localhost:6379/0' # 存储任务处理结果的数据库或mq
, include=['single-simple-demo']) #适用于寻找目录中所有的task
# 为应用创建任务, 有没有输入参数 和 有没有返回值,可以自己定
@my_task.task
def test_task(n, r):
open('test.txt', 'a').write(n + '\n')
print(n)
return r
if __name__ == '__main__':
import random, time
# 此处开始异步调用任务,
res = test_task.delay(f'==== 传递的任务参数 =====', random.randint(0, 10000))
print(res.id)
# 返回的结果可以通过taskid查询
from celery.result import AsyncResult
async_task = AsyncResult(id=res.id, app=my_task)
time.sleep(1)
# 判断异步任务是否执行成功
if async_task.successful():
# 获取异步任务的返回值
result = async_task.get()
print(result)
else:
print("任务还未执行完成")
上面代码里已经做了解释。
另外:worker的运行可以通过命令行方式运行 (重点:在single-simple-demo.py同级目录下cmd运行)
celery -A single-simple-demo ?worker --loglevel=info -P eventlet
定时器任务如下链接:
Celery-python下定时任务模块 - y0um - 博客园
|