फ्लास्क में गीवेंट का उपयोग करना: एपीआई एसिंक्रोनस नहीं है
पहले मैं वेट्रेस का इस्तेमाल कर रहा था। अब मैं अपने 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()
यह ठीक काम करता है। लेकिन एपीआई अतुल्यकालिक नहीं है। अगर सामने से, मैं एक ही समय में एक ही एपीआई को दो बार फायर करता हूं, तो दूसरा कॉल पहले प्रतिक्रिया देने के लिए पहले इंतजार करता है।
यहाँ क्या गलत है? मैं इसे अतुल्यकालिक कैसे बना सकता हूं?
जवाब
हम कई प्रक्रियाओं में फ्लास्क को चलाने के लिए गुनिकॉर्न का उपयोग करते हैं। आप अजगर से अधिक रस प्राप्त करते हैं जिस तरह से + ऑटो पुनरारंभ होता है और सामान होता है। नमूना विन्यास फाइल:
import multiprocessing
bind = "0.0.0.0:80"
workers = (multiprocessing.cpu_count() * 2) + 1
# ... additional config
फिर कुछ इस तरह से चलाएं
gunicorn --config /path/to/file application.app
निश्चित नहीं है, हालाँकि मुझे लगता है कि सर्वर ऑब्जेक्ट में थ्रेड परम जोड़ने से समस्या हल हो सकती है।
http_server = WSGIServer(('127.0.0.1', 8000), app, numthreads=50)
स्रोत: https://f.gallai.re/wsgiserver
"""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