python sanic celery example

Celery

Celery 是一个基于 Python 开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理

看看如何 CelerySanic 一起使用

使用

使用的组件

1
2
3
4
sanic==21.12.1
celery==5.2.3
redis==4.1.4
flower==1.0.0

tasks/task.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import time

from celery import Celery

REDIS_URI = "127.0.0.1"
REDIS_PORT = 6379
REDIS_DB = 0

app = Celery(
"tasks",
broker=f"redis://{REDIS_URI}:{REDIS_PORT}/{REDIS_DB}",
backend=f"redis://{REDIS_URI}:{REDIS_PORT}/{REDIS_DB}",
)


@app.task
def run_task(name):
time.sleep(5)
return "Hello, {}!".format(name)

server.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from sanic import Sanic
from sanic.response import text

from tasks.task import run_task

app = Sanic("MyHelloWorldApp")


@app.post("/start_task")
async def start_task(request):
result = run_task.delay("jakehu")
print(result)
return text("Task started.")


if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True, auto_reload=True)

worker.py

1
from tasks.task import app

运行 worker 进程

1
celery -A worker:app worker --loglevel=info --concurrency=1

Flower

Flower 是基于 web 的监控和管理 Celery 的工具

使用

1
celery --broker=redis://127.0.0.1:6379/0 flower --port=5566

Celery 参考文档
Flower 参考文档