python | 使用flask部署celery异步服务并用flower实时查看——初级代码教程

文章目录

0.1 安装redis

可以参考 Redis 安装

0.2 安装celery和flower


conda install celery
pip install flower
  1. celery+flask代码结构及代码内容

我自己这个例子里代码目录结构如下:

python | 使用flask部署celery异步服务并用flower实时查看——初级代码教程

; 1.1 tasks.py

下面的代码是celery服务的核心计算代码:计算一个list中所有元素的和;计算list中所有元素的乘积;

from celery import Celery
import time
import config

celery_app = Celery(config.celery_name,
                broker=config.BROKER_URL,
                backend=config.BACKEND_URL)

@celery_app.task
def add(input_list,k=10):
    time.sleep(k)
    return(sum(input_list))

1.2 congfig.py

celery_name = "test"

BACKEND_URL = "redis://localhost:6379/0"
BROKER_URL = "redis://localhost:6379/0"

PORT = 3000

1.3 flask_service.py

import json
from flask import Flask, request, jsonify
from celery import Celery
from tasks import add
import config

flask_app = Flask(__name__)

celery_app = Celery(config.celery_name,
                broker=config.BROKER_URL,
                backend=config.BACKEND_URL)

@flask_app.route(rule='/sum', methods=['POST'])
def add_service():
    input_list = json.loads(request.data)['input_list']
    k = json.loads(request.data)['k']
    task = add.delay(input_list,k)
    task_id = task.task_id
    return jsonify({'code':200,"TaskId":task_id,"msg":"success"})

@flask_app.route(rule='/get_add', methods=['GET'])
def get_add():
    task_id = json.loads(request.data)['TaskId']
    task_result = celery_app.AsyncResult(task_id)
    result = {
        "code":200,
        "msg":"success",
        "TaskId": task_id,
        "Status": task_result.status,
        "Result": task_result.result
    }
    return jsonify(result)

if __name__ == '__main__':
    flask_app.run(host='localhost', port=config.PORT, debug=True)

1.4 init .py

内容为空

  1. 启动celery和flask服务

在一个terminal里运行(路径要进入到app目录下面)celery:

celery -A tasks worker --loglevel=info

然后在另一个terminal里面运行flask服务,启动异步服务(在app目录下):

python3 flask_service.py

测试服务的代码在test_service.py里面,代码如下(要先请求求和的任务,然后每隔一秒钟请求结果服务,一共是两个服务):

import requests
import json
import time

from app.config import PORT

url = 'http://localhost:%d/sum'%PORT
d = {'input_list':[1,2,3,4,5],'k':5}
r = requests.post(url, data=json.dumps(d))
result = json.loads(r.content)
print(result)
task_id = result['TaskId']

url = 'http://localhost:%d/get_add'%PORT
d = {'TaskId':task_id}
while 1:
    r = requests.get(url, data=json.dumps(d))
    result = json.loads(r.content)
    if result['Status'] == "SUCCESS":
        print('add is ready  ! Status = %s' % result['Status'], result)
        break
    else:
        print('add NOT ready ! Status = %s' % result['Status'])
        time.sleep(1)
  1. 启动flower-任务实时监控页面

网上有的教程说是 celery和 flower一起启动,我没试成功,我运行成功的是这个命令:

在上述操作完之后,再打开一个terminal,进入app目录下,运行:

celery -A tasks flower

然后可以打开界面 http://localhost:5555/ 查看任务:

说明1:运行这个flower的同时,前面的运行celery的 还要运行,也就是 celery -A tasks flower这个命令只是启动了flower。如果关闭前面的 celery -A tasks worker命令。 再提交测试服务的代码,会显示一直”PENDING”。

说明2:可以看到,上述的操作方式中,flower和celery是几乎独立的,先运行完celery,再运行flower就行。

  1. celery自带添加日志函数

使用celery自带了日志函数


from celery.utils.log import get_task_logger
celery_logger = get_task_logger(__name__)

celery_logger.info("日志内容")

Original: https://blog.csdn.net/qq_36810398/article/details/120421901
Author: 南瓜派三蔬
Title: python | 使用flask部署celery异步服务并用flower实时查看——初级代码教程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/746751/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 构建自己的gym训练环境 巨详细

    一、构建自己的gym训练环境 环境中主要有六个模块,下面将主要以官方的MountainCarEnv为例对每个模块进行说明。 主要作用是初始化一些参数 如在MountainCarEn…

    Python 2023年10月8日
    060
  • python pygame鼠标点击_python学习之GUI(pygame鼠标)

    鼠标的位置和其他PyGame的程序一样使用坐标来表示。坐标的值经常使用x和y变量来表示。左上角的坐标值是0,0,x和y的值随着鼠标的向右和向下的移动而增加。 打印鼠标左键点击位置i…

    Python 2023年9月23日
    043
  • python:Flask中request对象的简单用法

    因为在工作中需要将写好的Python程序改写成API接口供其他部门使用,所以这篇博客重点利用Flask的请求对象完成数据传输,对于更深层次的理论方面的内容,以后再补充;本文只涉及本…

    Python 2023年8月14日
    088
  • Nice to meet you, Django

    django 的安装和基本使用 pip install django 但是这样安装的应该是最新版的,想用其他版本的在 Django后加版本号 django-admin startp…

    Python 2023年8月6日
    053
  • 面试突击80:说一下 Spring 中 Bean 的生命周期?

    Java 中的公共类称之为 Bean 或 Java Bean,而 Spring 中的 Bean 指的是将对象的生命周期,交个 Spring IoC 容器来管理的对象。所以 Spri…

    Python 2023年10月23日
    053
  • lecture 4:Python数据清洗与整理

    数据整理的综合案例 第一部分 按性别/年份统计出生数思路:加载所有txt文件并进行整合,创建数据透视表,运用DataFrame内置绘图 请先将所有的TXT文件放在d://myfol…

    Python 2023年8月18日
    070
  • flask mysql的报错

    raise err.OperationalError(sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError)…

    Python 2023年8月10日
    043
  • Scrapy框架的学习(一)

    1. Scrapy概述 1. 为什么要学习scrapy框架 爬虫必备的技术,面试会问相关的知识。 让我们的爬虫更快更强大。(支持异步爬虫) 2. 什么是Scrapy? 异步爬虫框架…

    Python 2023年10月1日
    044
  • torch.hub.load()函数的使用——联网加载权重以及如何加载本地权重

    torch.hub.load()函数可以通过两种方式加载模型。 pytorch官方文档 函数原型: torch.hub.load(repo_or_dir, model, *args…

    Python 2023年8月2日
    068
  • Torch 模型 onnx 文件的导出和调用

    Open Neural Network Exchange (ONNX,开放神经网络交换) 格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移 Torch 所定义…

    Python 2023年10月27日
    062
  • 8个Spring事务失效的场景,你碰到过几种?

    前言 作为Java开发工程师,相信大家对 Spring种事务的使用并不陌生。但是你可能只是停留在基础的使用层面上,在遇到一些比较特殊的场景,事务可能没有生效,直接在生产上暴露了,这…

    Python 2023年10月11日
    066
  • React Native环境搭建:ios环境搭建

    按照 React Native官网的环境搭建过程,我们启动项目后总会遇到很多奇奇怪怪的环境问题。通过几天的折腾,终于完美地将 React Native项目给启动了起来。以下是我通过…

    Python 2023年11月8日
    043
  • ElementUI + Vue + Django 上传文件

    但其它方法也有可借鉴的地方,特此记录 首先安装相应的包 Django == 3.1.5 djangorestframework == 3.11.1 django-cors-head…

    Python 2023年8月5日
    048
  • NumPy数值计算基础

    NumPy数值计算基础 1、利用array函数创建数组对象 array函数的格式:np.array(object, dtype,ndmin) import numpy as np …

    Python 2023年8月25日
    061
  • Opengl ES之YUV数据渲染

    YUV回顾 记得在音视频基础知识介绍中,笔者专门介绍过YUV的相关知识,可以参考:《音视频基础知识-YUV图像》 YUV数据量相比RGB较小,因此YUV适用于传输,但是YUV图不能…

    Python 2023年10月14日
    061
  • 初学Python到月入过万最快的兼职途径(纯干货)

    程序员小猴紫,不错过任何一次干赚钱干货 1.兼职薪资,附行哥工资单 2.兼职门槛,附学习知识清单 3.兼职途径,附入职考核过程 4.我的兼职感受 答应小猴紫的第一篇赚钱干货推文来啦…

    Python 2023年9月23日
    048
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球