फ्लास्क में गीवेंट का उपयोग करना: एपीआई एसिंक्रोनस नहीं है

Aug 18 2020

पहले मैं वेट्रेस का इस्तेमाल कर रहा था। अब मैं अपने Flask ऐप को चलाने के लिए Gevent का उपयोग कर रहा हूं जिसमें केवल एक 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()

यह ठीक काम करता है। लेकिन एपीआई अतुल्यकालिक नहीं है। अगर सामने से, मैं एक ही समय में एक ही एपीआई को दो बार फायर करता हूं, तो दूसरा कॉल पहले प्रतिक्रिया देने के लिए पहले इंतजार करता है।

यहाँ क्या गलत है? मैं इसे अतुल्यकालिक कैसे बना सकता हूं?

जवाब

1 AlexWeavers Sep 01 2020 at 14:30

हम कई प्रक्रियाओं में फ्लास्क को चलाने के लिए गुनिकॉर्न का उपयोग करते हैं। आप अजगर से अधिक रस प्राप्त करते हैं जिस तरह से + ऑटो पुनरारंभ होता है और सामान होता है। नमूना विन्यास फाइल:

import multiprocessing

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

फिर कुछ इस तरह से चलाएं

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

निश्चित नहीं है, हालाँकि मुझे लगता है कि सर्वर ऑब्जेक्ट में थ्रेड परम जोड़ने से समस्या हल हो सकती है।

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

स्रोत: 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