Gevent'i şişede kullanma: API eşzamansız değildir

Aug 18 2020

Daha önce Garson kullanıyordum. Şimdi sadece bir API'ye sahip Flask uygulamamı çalıştırmak için Gevent kullanıyorum

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()

Bu iyi çalışıyor. Ancak API eşzamansız değildir. Ön uçtan aynı API'yi aynı anda iki kez çalıştırırsam, ikinci çağrı ilkinin önce yanıt vermesini bekler.

Burada sorun ne? Nasıl eşzamansız hale getirebilirim?

Yanıtlar

1 AlexWeavers Sep 01 2020 at 14:30

Flask'ı birden fazla işlemde çalıştırmak için Gunicorn kullanıyoruz. Bu şekilde python'dan daha fazla meyve suyu elde edersiniz + otomatik yeniden başlatmalar ve benzeri şeyler. Örnek yapılandırma dosyası:

import multiprocessing

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

Sonra şöyle bir şeyle koş

gunicorn --config /path/to/file application.app
1 pritesh Sep 07 2020 at 06:43

Emin değilim, ancak sunucu nesnesine iş parçacığı parametresi eklemenin sorunu çözebileceğini düşünüyorum .

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

kaynak: https://f.gallai.re/wsgiserver

1 EM28 Sep 07 2020 at 23:17
"""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