[英]Flask: the way closing database connections, will it able to handle high traffic?
我需要創建20個API才能使用我的應用。 這些API將從我的MySQL數據庫中獲取數據。 由於我預計高峰時段的流量會很高(高峰時段只有2小時),每秒可能會收到30到50個請求。
我擔心的是連接。 由於一次只允許3個連接,因此使用我關閉游標的方法,數據庫將能夠處理高流量,並且用戶能夠毫無問題地訪問20個API? 我獲取的數據很小,因為我的整個文本數據庫只有2MB。
如果此方法可以處理高流量,我將不希望切換到sqlalchemy。
# A very simple Flask Hello World app for you to get started with...
from flask import Flask,jsonify,abort,make_response,request,render_template
import MySQLdb
import MySQLdb.cursors
app = Flask(__name__)
@app.route('/MUSIC', methods=['GET'])
def Music():
db = MySQLdb.connect(host='doreme.mysql.pythonanywhere-services.com',user='doreme',passwd='pw',db='doreme$default',cursorclass=MySQLdb.cursors.DictCursor)
curs = db.cursor()
try:
curs.execute("SELECT * FROM MUSIC")
a = curs.fetchall()
except Exception:
return 'Error: unable to fetch items'
finally:
curs.close()
db.close()
return jsonify({'Music': a})
@app.route('/MUSICKorea', methods=['GET'])
def MusicKorea():
db = MySQLdb.connect(host='doreme.mysql.pythonanywhere-services.com',user='doreme',passwd='pw',db='doreme$default',cursorclass=MySQLdb.cursors.DictCursor)
curs = db.cursor()
try:
curs.execute("SELECT * FROM MusicKorea")
b = curs.fetchall()
except Exception:
return 'Error: unable to fetch items'
finally:
curs.close()
db.close()
#return "hihi"
return jsonify({'Song': b})
@app.route('/MUSICKorea/<Item>', methods=['GET'])
def Musicitem(Korea):
db = MySQLdb.connect(host='doreme.mysql.pythonanywhere-services.com',user='doreme',passwd='pw',db='doreme$default',cursorclass=MySQLdb.cursors.DictCursor)
try:
curs.execute("SELECT * FROM MUSIC WHERE Song LIKE %s",(Korea,))
c = curs.fetchall()
except Exception:
return 'Error: unable to fetch items'
finally:
curs.close()
db.close()
return jsonify({'Korea': c})
您可以使用http基准測試工具輕松地測試wsgi應用程序( 此處列出了 ab,wrk等更多工具)。
測量您的python函數和/或mysql查詢所花費的時間(非常簡單,時間可能會更好):
import time
...
@app.route('/MUSICKorea/<Item>', methods=['GET'])
def Musicitem(Korea):
t = time.time()
db = MySQLdb.connect(host='doreme.mysql.pythonanywhere-services.com',user='doreme',passwd='pw',db='doreme$default',cursorclass=MySQLdb.cursors.DictCursor)
print('connecting took %.6f seconds' % (time.time()-t))
try:
curs.execute("SELECT * FROM MUSIC WHERE Song LIKE %s",(Korea,))
c = curs.fetchall()
except Exception:
return 'Error: unable to fetch items'
finally:
curs.close()
db.close()
print('Musicitem took %.6f seconds' % (time.time()-t))
return jsonify({'Korea': c})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.