У меня есть проекты, развернутые в Google App Engine с API Google (Python). Каждый запрос к любому из API создает соединение с базой данных, выполняет процедуру и возвращает данные и закрывает соединение. Я не смог получить доступ к любому из API, поскольку он показывалкак решить «Процесс завершен, потому что срок подачи заявки был превышен. (Код ошибки 123)» в google api?
«Процесс завершен, потому что срок выполнения запроса был превышен. (Код ошибки 123)» и «Этот запрос запустил новый процесс для вашего приложения и, таким образом, что ваш код приложения будет загружен в первый раз. Таким образом, этот запрос может занять больше времени и использовать больше CPU, чем типичный запрос для вашего приложения ». ошибка.
База данных также находится в облаке (Google Cloud SQL). Когда я проверил, было 900 соединений, и было выполнено более 150 экземпляров, но запрос api не обрабатывался. Это происходит часто. Поэтому я снова перезапускаю сервер базы данных и снова развертываю код API для решения этой проблемы. В чем проблема и как я могу решить эту проблему навсегда? Вот мой питон код для подключения к базе данных: -
import logging
import traceback
import os
import MySQLdb
from warnings import filterwarnings
filterwarnings('ignore', category = MySQLdb.Warning)
class TalkWithDB:
def callQueries(self,query,req_args):
try:
if (os.getenv('SERVER_SOFTWARE') and os.getenv('SERVER_SOFTWARE').startswith('Google App Engine/')):
db = MySQLdb.connect(unix_socket = UNIX_SOCKET + INSTANCE_NAME, host = HOST, db = DB, user = USER ,charset='utf8',use_unicode=True)
else:
db = MySQLdb.connect(host = HOST, port = PORT, db = DB, user = USER, passwd = PASSWORD,charset='utf8',use_unicode=True)
cursor = db.cursor()
cursor.connection.autocommit(True)
try:
sql = query+str(req_args)
logging.info("QUERY = "+ sql)
cursor.execute(sql)
procedureResult = cursor.fetchall();
if str(procedureResult) == '()':
logging.info("Procedure Returned 0 Record")
procedureResult = []
procedureResult.append({0:"NoRecord", 1:"Error"})
#procedureResult = (("NoRecord","Error",),)
elif procedureResult[0][0] == 'Session Expired'.encode(encoding='unicode-escape',errors='strict'):
procedureResult = []
procedureResult.append({0:"SessionExpired", 1:"Error"})
except Exception, err:
logging.info("ConnectDB.py : - Error in Procedure Calling : " + traceback.format_exc())
#procedureResult = (('ProcedureCallError','Error',),)
procedureResult = []
procedureResult.append({0:"ProcedureCallError", 1:"Error"})
except Exception, err:
logging.info("Error In DataBase Connection : " + traceback.format_exc())
#procedureResult = (('DataBaseConnectionError','Error',),)
procedureResult = []
procedureResult.append({0:"DataBaseConnectionError", 1:"Error"})
# disconnect from server
finally:
try:
cursor.close()
db.close()
except Exception, err:
logging.info("Error In Closing Connection : " + traceback.format_exc())
return procedureResult
* Как я могу решить это в будущем? * Разве вы его не решили? –
это решение на время. Но я не думаю, что это связано с изменениями в app.yaml для незанятых экземпляров. И в чем причина этого? –
у вас увеличено количество неиспользуемых экземпляров -> больше шансов, что у вас есть незанятый экземпляр для запроса -> уменьшено количество раз, когда необходимо запустить новые экземпляры –