Я создал API django со следующими views.py
import datetime
import os
import traceback
from logging.handlers import TimedRotatingFileHandler
from logging import Formatter
from django.http import HttpResponse
import logging
# from . import models as m
import pandas as pd
import json
import psycopg2 as pg
# logger setup
def resp(status):
//returns status code
def index(request):
logger.info('request:' + str(request.GET))
obj = DAA()
if request.method == "GET":
// get values from url request
if (condition):
try:
connection = pg.connect(dbname="dbname", user="user", password="password")
cursor = connection.cursor()
response = obj.level1(arguments)
response = obj.level2(arguments)
try:
// check response
except Exception as e:
# add exception to log
except Exception as e:
# add exception to log
if response :
json_data = {
"responseCode": 200,
"version": "1.0.0",
"results":
[
// response
]
}
json_dump = json.dumps(json_data)
return HttpResponse(json_dump, content_type='application/json')
elif not response :
json_dump = resp(400)
return HttpResponse(json_dump, content_type='application/json')
class DAA:
def level1(arguments):
GB = []
if condition:
query = //query
try:
query_df = pd.read_sql_query(query, connection)
response = [i for i in query_df[//xyz]] // get values
except Exception as e:
cursor.execute('rollback;')
# add exception to log
return None
gb_data = //response
GB.append(gb_data)
return GB
else :
argument = argument .upper()
argument = argument .split(',')
for i, val in enumerate(argument):
query = //query
try:
query_df = pd.read_sql_query(query, connection)
response = [i for i in query_df['xyz']]
except Exception as e:
# add exception to log
return None
gb_data = //response
GB.append(gb_data)
return GB
def level2(arguments):
if condition:
argument = []
try:
cursor.execute( // query )
return response
except Exception as e:
cursor.execute('rollback;')
# add exception to log
return None
else :
argument = []
argument = argument.upper()
argument = argument.split(',')
for i, val in enumerate(argument):
try:
cursor.execute( //query )
except Exception as e:
# add exception to log
return None
return response
с указанным кодом, я сталкиваюсь со следующими проблемами:
- При тестировании приложения для более чем 100 пользователей на jmeter я получаю сообщение об ошибке "слишком много клиентов уже", похоже, это проблема с базой данных postgres, как в файле conf [max_connections = 100], но с увеличением количества соединений Кажется, мне это не помогло, поэтому предложите что-нибудь другое.
- Даже при запуске приложения для менее чем 100 пользователей появляется сообщение об ошибке «RuntimeError: не удается запустить новый поток», поэтому, пожалуйста, предложите, как решить эту проблему?
- Примечание: - пожалуйста, игнорируйте ошибки программирования, так как я поделился только фиктивной структурой моего кода.