Как оптимизировать время выполнения представления django, чтобы оно не занимало время на выполнение
Мне нужна помощь, мое представление django занимает много времени для запуска Всего у меня 6 представлений и каждое представление занимает 6 минут ответов Я использую pandas dataframe для извлечения xml данных, затем я применяю формулу множественных вычислений, медленнее всего загружается домашняя страница home.html, потому что на ее выполнение уходит 45 минут
решение я прочитал:
- использовать мультипроцессинг для параллельного выполнения каждого представления, но я не знаю, как это сделать
что я искал:
-django-q, к сожалению, это для sql-запросов, мой код не содержит sql-запросов,
Есть ли у вас какие-либо идеи относительно процесса, которому я должен следовать
my home_view django
def home_view(request):
month = ''.join(request.GET.getlist('id_mois'))
this_region = ''.join(request.GET.getlist('id_region'))
# --------------------REVENU-------------------- :
from REVENU.revenu import details_revenu
init_revenu = initializing_revenu()
ref_details_revenu = details_revenu(init_revenu[0], init_revenu[1], this_region, month)
# ---------------------SUBSCRIBER------------------:
from SUBSCRIBER.subscriber import subscriber_details
init_subscriber = initializing_subscriber()
ref_subscriber = subscriber_details(init_subscriber[0], init_subscriber[1], this_region, month)
# -----------------ANIMATEUR--------------------:
from ANIMATEUR.animateur import function_animateur
init_animateur = initializing_animateur()
ref_animateur = function_animateur(init_animateur[0], init_animateur[1], this_region)
# -----------------MVOLA--------------------:
from MVOLA.mvola import mvola_details
init_mvola = initializing_mvola()
mvola = mvola_details(init_mvola[0], init_mvola[1], this_region, month)
context = {#....some context}
return render(request, 'home.html', context)
здесь возврат, абонент, мвола, аниматор занимает 6мин каждый раз на выполнение
отредактировано
каждая функция имеет файл инициализации в соответствии с xml
def initializing_subscriber() :
XML_SUBSCRIBER = urllib.request.urlopen('http://reference/subscriber/')
COL_SUBSCRIBER = ['region','localite','ville','techno','parc_global','activation','churn','date_']
cols_numeric = ['parc_global','activation','churn']
cols_string = ['region','localite','ville','techno','date_']
df_subscriber = parse_XML(XML_SUBSCRIBER,COL_SUBSCRIBER)
df_subscriber['mois']= df_subscriber['date_'].str.split('-').str[1]
df_subscriber['annee']=df_subscriber['date_'].str.split('-').str[0]
df_subscriber[cols_numeric] =df_subscriber[cols_numeric].apply(pd.to_numeric)
d1 = dict.fromkeys(cols_numeric, 'sum')
d2 = dict.fromkeys(cols_string, 'first')
d = {**d1, **d2}
return df_subscriber,d
если я возьму случай абонента, то функция будет :
def subscriber_details(df_subscriber,d,region_subscriber,mois_subscriber):
this_year_last_month = df_subscriber.loc[
(df_subscriber['region'] == REGION) &
(df_subscriber['annee'] == ANNEE) &
(df_subscriber['mois'] == LAST_MONTH)]
df_last_month = this_year_last_month
df_last_month= df_last_month.groupby('localite', as_index=False).agg(d)
df['RGS(0)'] = df_last_month['parc_global']
df['RGS(1)'] = df['RGS(0)'] + df['activation'] + df['churn']
df['M net add'] = df_last_month['activation'] - df_last_month['churn']
df['Net Add'] = df['activation']-df['churn']
df['%Net add MoM'] = round((df['Net Add'] - df['M net add'])/df['M net add'] * 100,1)
df['Net add gap'] = round(df['Net Add'] - (df_last_month['activation']- df_last_month['churn']))
somme_rgs_1 = df['RGS(1)'].sum()
df['poids']= round(df['RGS(1)']/somme_rgs_1*100,1)
return df