2

早些时候我使用的是女服务员。现在我正在使用Gevent运行我的 Flask 应用程序,它只有一个 API

from flask import Flask, request, jsonify
import documentUtil
from gevent.pywsgi import WSGIServer

app = Flask(__name__)

@app.route('/post-document-string', methods=['POST']) 
def parse_data():
    req_data = request.get_json(force=True)
    text = req_data['text']
    result = documentUtil.parse(text)
    return jsonify(keywords = result)

if __name__=='__main__':
    http_server = WSGIServer(('127.0.0.1', 8000), app)
    http_server.serve_forever()

这工作正常。但是 API 不是异步的。如果从前端,我同时触发相同的 API 两次,第二次调用等待第一个首先给出响应。

这里有什么问题?我怎样才能使它异步?

4

3 回答 3

2

我们使用 Gunicorn 在多个进程中运行 Flask。你可以通过这种方式从 python 中获得更多的汁液 + 自动重启等等。示例配置文件:

import multiprocessing

bind = "0.0.0.0:80"
workers = (multiprocessing.cpu_count() * 2) + 1
# ... additional config

然后用类似的东西运行

gunicorn --config /path/to/file application.app
于 2020-09-01T14:30:11.400 回答
2
"""index.py"""

from flask import Flask
from flask import jsonify

app = Flask(__name__)


@app.route('/')
def index():
    """Main page"""
    doc = {
        'site': 'stackoverflow',
        'page_id': 6347182,
        'title': 'Using Gevent in flask'
    }
    return jsonify(doc)


# To start application
gunicorn -k gevent --bind 0.0.0.0 index:app

k : worker_class
--bind : bind address
# See https://docs.gunicorn.org/en/latest/settings.html
于 2020-09-07T23:17:52.023 回答
1

不确定,但是我认为在服务器对象中添加线程参数可以解决问题。

http_server = WSGIServer(('127.0.0.1', 8000), app, numthreads=50)

来源:https ://f.gallai.re/wsgiserver

于 2020-09-07T06:43:06.530 回答