2024年1月21日 15:15 by wst
异步处理在上一篇文章中,介绍了Celery的原理,这次我们来说下其中的异步任务。
创建一个文件夹demo, 然后在demo下创建admin.py,内容如下:
from celery import Celery
app = Celery('admin', broker="redis://:tecent987@100.144.155.133:6379/4", backend="redis://:tecent987@100.144.155.133:6379/5")
@app.task
def add(x, y):
print("running...", x, y)
return x+y
broker用于存储任务队列,backend用于存储任务执行结果。
在demo中创建文件run.py, 内容如下:
from admin import add
if __name__ == "__main__":
add.delay(4,5)
打开一个命令行窗口,运行以下命令启动执行服务。
celery -A admin worker --loglevel=info
抛一个任务给执行服务,创建文件run.py并运行, 内容如下:
from admin import add
if __name__ == "__main__":
add.delay(4,5)
在实际项目中,这里可能是抛出一个处理大文件的任务。
查看结果,进入自己的redis控制台,查看结果(注意最后两行)如下:
(base) ubuntu@VM-0-13-ubuntu:~$ redis-cli -h 100.144.155.133
100.144.155.133:6379> auth tecent987
OK
100.144.155.133:6379> keys *
(empty list or set)
100.144.155.133:6379> select 4
OK
100.144.155.133:6379[4]> keys *
1) "_kombu.binding.celery"
2) "_kombu.binding.celery.pidbox"
3) "_kombu.binding.celeryev"
100.144.155.133:6379[4]> select 5
OK
100.144.155.133:6379[5]> keys *
1) "celery-task-meta-915a1314-4cd7-473e-acbc-d385e66d4f56"
2) "celery-task-meta-0b7378b6-5ccc-422f-b5b7-8eea92306001"
100.144.155.133:6379[5]> get celery-task-meta-0b7378b6-5ccc-422f-b5b7-8eea92306001
"{\"status\": \"SUCCESS\", \"result\": 9, \"traceback\": null, \"children\": [], \"date_done\": \"2024-01-21T03:40:51.306585\", \"task_id\": \"0b7378b6-5ccc-422f-b5b7-8eea92306001\"}"
本文主要讲述了怎么启动并执行一个简单异步处理任务。对于Celery本身的理解又更进一步。