使用Flask框架异步处理POST请求

原创 2018年04月17日 21:39:22

原文出处 http://xugaoxiang.com/post/120

软硬件环境

  • ubuntu 16.04 64bit
  • python3
  • flask

问题描述

在使用web框架flask的时候,经常需要提供HTTP POST接口来处理一些数据,而当多个客户端连接上来的时候,如何并行地处理这些任务经常困扰着我们,本文就来利用concurrent.futures来实现这个功能.

代码实践

具体可以看看行间注释

# -*- coding: utf-8 -*-
# @Time    : 18-4-17 下午4:15
# @Author  : xugaoxiang
# @Email   : djstava@gmail.com
# @Website : http://www.xugaoxiang.com
# @File    : test.py
# @Software: PyCharm

import os
import time

from flask import Flask, request
from werkzeug.utils import secure_filename
from concurrent.futures import ThreadPoolExecutor

flask_app = Flask(__name__)

# 能接收的图片文件大小
flask_app.config['MAX_CONTENT_LENGTH'] = 2 * 1024 * 1024

# 同时处理的最大线程数
executor = ThreadPoolExecutor(10)

# 能接收的文件后缀名
ALLOWED_EXTENSIONS = set(['png','jpg','jpeg'])

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS

# 只能接收POST方法
@flask_app.route('/uploadImageFile', methods=['POST'])
def uploadImageFile():

    '''
    HTTP POST, 接收发送过来的图片数据
    :return:
    '''

    # multipart/form-data file --> key
    file = request.files['longjing']
    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        if not os.path.exists('temp'):
            os.mkdir('temp')

        file.save(os.path.join('temp', filename))

        # 上传的是空文件
        if os.stat(os.path.join('temp', filename)).st_size == 0:
            os.remove(os.path.join('temp', filename))
            return 'Empty image file.'

        # 异步任务
        executor.submit(do_job, filename)

        # 直接返回
        return 'POST success.'

    else:
        return "POST failed."

def do_job(filename):
    '''
    模拟的异步任务
    :param filename:
    :return:
    '''

    print('start do_job, file={}'.format(filename))
    time.sleep(10)
    print('finish do_job')

if __name__ == '__main__':

    flask_app.run(host='0.0.0.0', port=8889)

使用Postman来模拟POST操作

参考资料

https://zhuanlan.zhihu.com/p/30897711

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/djstavaV/article/details/79981321

浅入浅出Flask框架:处理客户端通过POST方法传送的数据

我在使用python发送post请求到flask时发现一个以为很奇怪的问题,记录下来方便回顾吧 flask无法获取post过来的json数据,开始以为post请求写的有问题,或者flask解析有问题...
  • hit0803107
  • hit0803107
  • 2016年12月08日 14:43
  • 2040

Flask 使用重定向作为POST请求的响应

用户输入名字后提交表单,然后点击浏览器的刷新按钮,会看到一个莫名其妙警告:要求在再次提交表单之前进行确认。之所以出现这种情况,是因为刷新页面时浏览器会重新发送之前已经发送过的最后一个请求。如果这个请求...
  • check2255
  • check2255
  • 2017年04月29日 10:57
  • 1742

web接口Flask测试之GET与POST请求

关于HTTP协议,我考虑了一下觉得没必要再花一节内容来介绍,因为网上关于HTTP协议的介绍非常详细。本着以尽量避免介绍一空洞了概念与理论来介绍接口测试,我这里仍然会给出具体实例。   在此之前先简单的...
  • qq_20711445
  • qq_20711445
  • 2016年06月13日 16:05
  • 7892

【Flask】Flask实现异步非阻塞请求功能

最近做物联网项目的时候需要搭建一个异步非阻塞的HTTP服务器,经过查找资料,发现可以使用gevent包。 Gevent 是一个 Python 并发网络库,它使用了基于 libevent 事件循环的 g...
  • u012163234
  • u012163234
  • 2016年10月24日 21:39
  • 7586

flask中的get与post请求

# main.py from flask import Flask, render_template, request app = Flask(__name__) @app.route('/'...
  • qq_37453240
  • qq_37453240
  • 2018年01月26日 21:35
  • 66

flask接收post请求

最近接到一个任务: 写一个server来接收数据,请求方式为post,传输方式为https最终选定python轻量级框架flask 安装:sudo pip install Flask关于flask...
  • sadjladjlas
  • sadjladjlas
  • 2016年08月16日 14:07
  • 2504

Flask Web 开发 GET POST两种请求及重定向

简单讲一下基础概念 比如在web表单的开发过程中 一个url针对的是一个web表单页面,那么,第一次访问应用时,他使用的是get请求!!只有当用户填完表单并符合要求提交时候,才是POST请求 这个非常...
  • bestallen
  • bestallen
  • 2016年08月09日 14:40
  • 7521

flask 处理post方法遇到的一个问题

最近通过flask编写一个web程序,在通过requests模块对restful接口进行测试时,遇到了一个问题,在这里记录下。关键词: post提交方式1.问题描述 通过requests进行post...
  • fcxjluo
  • fcxjluo
  • 2017年01月08日 23:11
  • 1645

python构造json格式的post请求访问flask server

python构造json格式的post请求访问flask server最近需要用python去访问restful接口,想到可以顺便学习下flask,就写了一个简单的例子。1.环境准备环境: Linux...
  • a398942089
  • a398942089
  • 2017年08月04日 16:55
  • 462

Python flask post接口

from flask import Flask,render_template,request app = Flask(__name__) @app.route("/login",methods = ...
  • zhaoyangjian724
  • zhaoyangjian724
  • 2017年11月13日 10:05
  • 196
收藏助手
不良信息举报
您举报文章:使用Flask框架异步处理POST请求
举报原因:
原因补充:

(最多只允许输入30个字)