Слишком долго добавление с помощью append в двойном цикле, как сделать если очень много значений добавлять быстрее значения

def search(request):
    sort = request.GET.get('sort')
    manuf = request.GET.get('manuf')
    group = request.GET.get('group')
    art = request.GET.get('art')
    brend = request.GET.get('brend')
    #кроссировка для api python
    if request.GET:
       # categories = Category.objects.filter(published=True).select_related('parent').prefetch_related('children')
        form = SearchForm(request.GET)
        query = request.GET.get('q', '').lower()
        query = query.replace("/", '')
        cart_product_form = CartAddProductForm()
        response = requests.get(
           url='https://fapi.iisis.ru/fapi/v2/productList?n='+query+'&ui=')
        if request.user.is_authenticated and response.status_code == 200: # если кроссировка подключена
            part_name = response.json()["productList"]['p']
            mf_name1 = response.json()["manufacturerList"]['mf']
            part_d = [page for page in response.json()["productList"]['p']]
            part_ns = [page['ns'] for page in response.json()["productList"]['p']]
            mf_name = [page for page in response.json()["manufacturerList"]['mf']]
            part_nam_s = [page['d'] for page in response.json()["productList"]['p']]
        else: # если нет
            part_name = None
            part_ns = None
            mf_name = None
        s = SphinxClient()
        s.SetServer('localhost', 9312)
        #s.SetSortMode(SPH_SORT_RELEVANCE)
        s.SetLimits(0, 16777215)
        if request.user.is_authenticated and art and brend:
               response2 = requests.get(
                   url='https://fapi.iisis.ru/fapi/v2/analogList?n=' + query + '&art={{art}}&brend={{brend}}&ui=')
               part_nsa = [page['nsa'] for page in response2.json()["analogList"]['a']]
               part_ns = [page['ns'] for page in response2.json()["analogList"]['a']]
               part_ns2 = [page for page in response2.json()["analogList"]['a']]
               art_ns2 = [page['mfai'] for page in response2.json()["analogList"]['a']]
               mf_brend = [page['ds'] for page in response2.json()["manufacturerList"]['mf']]
               mf_brend2 = [page for page in response2.json()["manufacturerList"]['mf']]
               pages_id = []
               pages_id1 = []
              query1 = art+' '+brend
               query_results2 = s.Query(query1, 'dars1')
               pages_id1.extend(pr['id'] for pr in query_results2['matches'])

               products2 = Product.objects.filter(id_p__in=pages_id1,
                                                  published=True).select_related('brand', 'category',
                                                                                 'product_sklad').prefetch_related(
                   'brand__clt1__client_id', 'category__parent')
               for person in response2.json()["analogList"]['a']:
                   query2 =  response2.json()["manufacturerList"]['mf'][person['mfai']]['ds']+' '+person['nsa']
                   query_results = s.Query(query2, 'dars2')
                   pages_id.extend(pr['id'] for pr in query_results['matches'])

Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Вы можете сократить количество .append следующим образом:

           pages_id = []
           pages_id1 = []
           query1 = art+' '+brend
           for person in response2.json()["analogList"]['a']:
               query2 =  response2.json()["manufacturerList"]['mf'][person['mfai']]['ds']+' '+person['nsa']
               query_results = s.Query(query2, 'dars2')
               query_results2 = s.Query(query1, 'dars1')
               pages_id.extend(pr['id'] for pr in query_results['matches'])
               pages_id1.extend(pr['id'] for pr in query_results2['matches'])

Но это не поможет. Мой опыт говорит что львиную долю времени занимают вызовы s.Query(...). Особенно подозрителен s.Query(query1, 'dars1'), который повторяется много раз с одними и теми же параметрами. Вынесите его из цикла.

→ Ссылка