Я создаю REST API. Я использую Python, Flask и MySQL для извлечения данных из базы данных и представления их в формате JSON. Но у меня проблема.Python с флягой и MySQL время после периода бездействия
REST API обслуживается с NGINX и uWSGI, и все работает хорошо. Индексная страница остается доступной и не отключается, но страницы, которые делают подключение к базе данных. Потребовалось около 15 минут, чтобы страницы стали невосприимчивыми. Эта проблема не возникает в СУБД, например phpmyadmin или navicat.
Что это может быть и как я могу это исправить? Код API REST ниже.
# using python version 2.7.10
from flask import Flask, jsonify, request, session
import mysql.connector.pooling
#Make a connection with the DB
dbconfig = {
"host" : "12.34.5.78",
"database": "db",
"user": "user",
"password": "pass"
}
conn = mysql.connector.connect(pool_name = "mypool",
pool_size = 6,
**dbconfig)
#Define the root
app = Flask(__name__)
#Landings page
@app.route('/')
def index():
return "Hello World."
# return all resources by name
@app.route('/resources', methods=['GET'])
def allResourceNames():
conn1 = mysql.connector.connect(pool_name="mypool")
reader = conn1.cursor()
query = ("SELECT name FROM resources")
reader.execute(query)
resources = []
for name in reader:
resources.append({'name' : name[0]})
reader.close()
conn1.close()
return jsonify({"resources" : resources})
if __name__ == "__main__":
app.run(debug=True)
Мне кажется, что вы используете одно соединение по ходу нескольких запросов. Когда это соединение становится недействительным, новые запросы не могут быть выполнены, так как вы не создаете новое соединение. Я думаю, вы должны посмотреть на объединение пулов. Может быть, этот вопрос может помочь http://stackoverflow.com/questions/32658679/how-to-create-a-mysql-connection-pool-or-any-better-way-to-initialize-the-multip – Busturdust
Не используйте одно глобальное соединение, вы столкнетесь с другими проблемами. Откройте и закройте соединение для каждого запроса или используйте пул для более эффективного управления этим. – davidism
Я принял к сведению то, что вы, ребята, сказали. Я обновил код. Он все еще умирает через пару минут ... – Stephen