技术标签: 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
flask-Celery-RabbitMQ系统 前言: 1.工作流程:User-Brokers(flask)-Celery(任务分配)-RabbitMQ 生产者:在Flask应用内运行 消费者:处理后台任务Celery 消息传递者:RabbitMQ,信息的交互使用是用消息队列 Flask基本介绍以及操作: Flask是依赖JinJa2模版引擎和WSGI服务的一个微型框架,用于接收请求并进行预处理 ...
main.py文件 config.py文件 tasks.py文件 目录结构...
flask + celery举例 先启动flask项目 再启动celery 注意:redis版本要和celery版本差不多,不然会报错...
1、创建文件夹--celery_tasks 2、创建文件--celery_tasks/__init__.py ×××××××××××××××××所有的异步任务都放在这个里面×&time...
写在开头 celery是一个分布式并行框架,适合一些并行任务。跟web程序结合可以实现web程序和业务代码的解耦合,celery是采用多进程方式进行的,所以能够有效利用多核CPU。 celery对于目录的层级结构要求非常高!要求非常高! 然而在网络上搜到的教程都写的七零八落的,不成体系,随便截个图就当做一篇博客。 为了解决以上问题,于是打算撰写这篇博客。 celery目录结构 学习celery从这...
Ubuntu环境玩耍Celery+Redis+Flask+Flask-mail实现异步发送QQ邮件 开始玩耍之前请确保项目已经安装: config配置: 如果你的Redis环境有密码 , 需要将"redis://127.0.0.1:6379/0" , 改成"redis://:[email protected]:6379/0" 其中xxx是你的Redis环境密码 Ce...
一.基本信息 参考:https://www.cnblogs.com/wdliu/p/9517535.html 1.简介 Celery是一个分布式消息队列,通常用来执行某些耗时操作和定时任务,支持异步任务调度。Celery 不仅可以单机运行,也能够同时在多台机器上运行,甚至可以跨数据中心。 2.组成 任务队列 客户端将要执行任务的消息放入任务队列,执行节点worker进程持续监控队列,有新任务时就取...
在代码中是查看celery队列不太方便,只能通过管理工具来查看(目前暂未找到其他较好方案,如有请留言告诉我),本文介绍一种利用redis的list结构来模拟任务队列状态的方案 首先我们学习下redis的基本操作。 python中redis基本操作 利用list结构模拟监控celery任务队列 1. 定义异步任务 tasks.py 中定义任务 在这个例子中,我们在redis中设置任务队列名为task...
celery 是一种分布式任务队列 以下是需要理解的几种概念 任务:消息队列里面的一个工作单元 分布式:独立Worker可以布在不同的机器上,一个worker可以指定并发数 Broker:消息通讯的中间人,主要有RabbitMQ, Redis(本例用的是redis,较为轻量级) beat:定时任务,可以指定任务若干秒后,或定时时间执行 安装就不说了,直接用 pip 就可以了,也可以安...
背景 在开发中,我们常常会遇到一些耗时任务,举个例子: 上传并解析一个 1w 条数据的 Excel 文件,最后持久化至数据库。 在我的程序中,这个任务耗时大约 6s,对于用户来说,6s 的等待已经是个灾难了。 比较好的处理方式是: 接收这个任务的请求 将这个任务添加到队列中 立即返回「操作成功,正在后台处理」的字样 后台消费这个队列,执行这个任务 我们按照这个思路,借助 Celery 进行实现。 ...