代码先锋网 代码片段及技术文章聚合

flask celery redis任务队列

技术标签: Redis  Python  Celery  数据库  python

main.py

from celery import Celery
from flask import Flask,jsonify
import os
flask_app = Flask(__name__)
flask_app.config.update(
    CELERY_BROKER_URL='redis://127.0.0.1:6379/0',
    CELERY_RESULT_BACKEND='redis://127.0.0.1:6379/0'
)

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproj.settings')
os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')

def make_celery(app):
    celery = Celery(
        app.name,
        backend=app.config['CELERY_RESULT_BACKEND'],
        broker=app.config['CELERY_BROKER_URL']
    )
    celery.conf.update(app.config)

    class ContextTask(celery.Task):
        def __call__(self, *args, **kwargs):
            with app.app_context():
                return self.run(*args, **kwargs)

    celery.Task = ContextTask
    return celery

# celery = make_celery(flask_app)
celery = Celery(flask_app.name, broker=flask_app.config['CELERY_RESULT_BACKEND'], backend=flask_app.config['CELERY_BROKER_URL'])

@celery.task()
def add_together(a, b):
    value = a + b
    with open ('aaa.txt','a+') as file:
        file.writelines([str(value)])
    return a + b


@flask_app.route('/test')
def test():
    #add_together.delay(20,40)
    #return jsonify('success')
    task = add_together.delay(20,40)
    return jsonify(task.get(timeout=10))

if __name__=='__main__':
    flask_app.run(port=5000)

运行完后访问http://localhost/5000/test 发送消息到redis

然后启动cmd 窗口执行如下,需要注意的是celery从4开始不支持Windows,但是Windows还能运行,需要额外安装eventlet

celery -A main worker --loglevel=info -P eventlet

其中main是python主文件的名称

参考:
https://stackoverflow.com/questions/37255548/how-to-run-celery-on-windows

https://flask.palletsprojects.com/en/2.0.x/patterns/celery/

https://docs.celeryproject.org/en/stable/userguide/tasks.html

https://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html

版权声明:本文为weixin_43632687原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43632687/article/details/121398984

智能推荐

Flask-Celery

flask-Celery-RabbitMQ系统 前言: 1.工作流程:User-Brokers(flask)-Celery(任务分配)-RabbitMQ 生产者:在Flask应用内运行 消费者:处理后台任务Celery 消息传递者:RabbitMQ,信息的交互使用是用消息队列 Flask基本介绍以及操作: Flask是依赖JinJa2模版引擎和WSGI服务的一个微型框架,用于接收请求并进行预处理 ...

flask使用celery笔记

main.py文件 config.py文件 tasks.py文件 目录结构...

flask + celery demo

flask + celery举例 先启动flask项目 再启动celery 注意:redis版本要和celery版本差不多,不然会报错...

flask最简celery

1、创建文件夹--celery_tasks 2、创建文件--celery_tasks/__init__.py ×××××××××××××××××所有的异步任务都放在这个里面×&time...

flask程序使用celery

写在开头 celery是一个分布式并行框架,适合一些并行任务。跟web程序结合可以实现web程序和业务代码的解耦合,celery是采用多进程方式进行的,所以能够有效利用多核CPU。 celery对于目录的层级结构要求非常高!要求非常高! 然而在网络上搜到的教程都写的七零八落的,不成体系,随便截个图就当做一篇博客。 为了解决以上问题,于是打算撰写这篇博客。 celery目录结构 学习celery从这...

猜你喜欢

Ubuntu环境玩耍Celery+Redis+Flask+Flask-mail实现异步发送QQ邮件

Ubuntu环境玩耍Celery+Redis+Flask+Flask-mail实现异步发送QQ邮件 开始玩耍之前请确保项目已经安装: config配置: 如果你的Redis环境有密码 , 需要将"redis://127.0.0.1:6379/0" , 改成"redis://:[email protected]:6379/0" 其中xxx是你的Redis环境密码 Ce...

分布式任务队列——celery+redis

一.基本信息 参考:https://www.cnblogs.com/wdliu/p/9517535.html 1.简介 Celery是一个分布式消息队列,通常用来执行某些耗时操作和定时任务,支持异步任务调度。Celery 不仅可以单机运行,也能够同时在多台机器上运行,甚至可以跨数据中心。 2.组成 任务队列 客户端将要执行任务的消息放入任务队列,执行节点worker进程持续监控队列,有新任务时就取...

利用redis的List结构模拟celery任务队列

在代码中是查看celery队列不太方便,只能通过管理工具来查看(目前暂未找到其他较好方案,如有请留言告诉我),本文介绍一种利用redis的list结构来模拟任务队列状态的方案 首先我们学习下redis的基本操作。 python中redis基本操作 利用list结构模拟监控celery任务队列 1. 定义异步任务 tasks.py 中定义任务 在这个例子中,我们在redis中设置任务队列名为task...

celery + redis

celery 是一种分布式任务队列 以下是需要理解的几种概念 任务:消息队列里面的一个工作单元 分布式:独立Worker可以布在不同的机器上,一个worker可以指定并发数 Broker:消息通讯的中间人,主要有RabbitMQ, Redis(本例用的是redis,较为轻量级) beat:定时任务,可以指定任务若干秒后,或定时时间执行   安装就不说了,直接用 pip 就可以了,也可以安...

Django - Celery异步任务队列

背景 在开发中,我们常常会遇到一些耗时任务,举个例子: 上传并解析一个 1w 条数据的 Excel 文件,最后持久化至数据库。 在我的程序中,这个任务耗时大约 6s,对于用户来说,6s 的等待已经是个灾难了。 比较好的处理方式是: 接收这个任务的请求 将这个任务添加到队列中 立即返回「操作成功,正在后台处理」的字样 后台消费这个队列,执行这个任务 我们按照这个思路,借助 Celery 进行实现。 ...