flask + celery demo

flask + celery举例

import time

from flask import Flask
from celery import Celery

app = Flask(__name__)

# 这里是配置中间人redis基础写法,可以照抄。如果是服务器,需要更换(127.0.0.1)
app.config['CELERY_BROKER_URL'] = 'redis://127.0.0.1:6379/0'
app.config['CELERY_RESULT_BACKEND'] = 'redis://127.0.0.1:6379/0'

# 初始化celery
celery_ = Celery(app.name, backend=app.config['CELERY_RESULT_BACKEND'], broker=app.config['CELERY_BROKER_URL'])
celery_.conf.update(app.config)


@app.route('/')
def hello_world():
    return 'Hello World!'


# 这里定义后台任务,异步执行装饰器@celery_.task
@celery_.task
def my_background_task(arg1):
    # some long running task here
    time.sleep(5)
    result = '成功执行' + arg1
    print(f'成功执行{result.id}')
    return result


# 以下是两个视图,测试celery能否正常使用
@app.route("/index")
def index():
    """一个测试的实例"""
    # print(my_background_task(3)) # add函数也能做普通的函数使用
    result = my_background_task.apply_async(args=['wo shi can shu!', ])  # 发送异步任务,指定队列

    return result.id


# @app.route("/index/")
# def get_result(result_id):
#     # 根据任务ID获取任务结果
#
#     print(result_id)
#     # 这里请注意,网上很多教程只有“AsyncResult”,但这是不对的
#     # 这里要调用的是实例化后的celery的对象方法才行,如果不是这样,启动celery服务后会报一个配置后端错误
#     result = celery_.AsyncResult(id=result_id)
#     print(result)
#     return str(result.get())


if __name__ == '__main__':
    app.run(debug=True)


先启动flask项目
python app.py runserver
再启动celery
celery -A app.celery_ worker --loglevel=info

注意:redis版本要和celery版本差不多,不然会报错

你可能感兴趣的:(python)