Проблема производительности Python - PullRequest
3 голосов
/ 16 октября 2019

У меня есть данные, как показано ниже

print(json_ls)

[{'user_id': '1', 'lot_number': 'b49d18f1b', 'status': 'send'}, 
 {'user_id': '2', 'lot_number': 'b49d18f1c', 'status': 'send'},
 {'user_id': '3', 'lot_number': 'b49d18f1d', 'status': 'send'},
 {'user_id': '4', 'lot_number': 'b49d18f1e', 'status': 'send'}]

И мне нужно отправить вышеуказанные данные в API в формате ниже

{'users': [

{'user_id': '1',  'status': 'ready'}, 
 {'user_id': '2',  'status': 'ready'},
 {'user_id': '3',  'status': 'ready'},
 {'user_id': '4',  'status': 'ready'}

]} 

Я написал код ниже, так как номер лотанеобходимо для URL, я изначально учел, что во фрейме данных и в приведенном ниже коде.

final_data = {'users': []}                                              

  for ls in json_ls:
    lot = ls.get("lot_number")
    url = url + lotnumber                                                  
    request_data = {a: b for (a, b) in ls.items() if a != "lot_number"}     
    final_data['users'].append(request_data)

    for users in final_data.get("recipients"):                              
           users["status"] = "ready"
    response = requests.patch(url, data=json.dumps(final_data), headers=headers)

Для обработки 500 пользователей в API, потребовалось 15 минут времени, а также не все пользовательские статусы, измененные на "готовы". Для каждого пользователя статус должен быть отправлен со статусом «готов».

Может ли кто-нибудь помочь мне в этом, а также как улучшить производительность от части кода (я прокомментировал ответ и проверил время выполнения. Это быстрее иСам API шва требует времени для ответа каждого пользователя)

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 16 октября 2019

Я подозреваю, что ваши проблемы с производительностью сводятся к отправке неверных данных, ваши окончательные данные всегда включают пользователей с предыдущих итераций, поэтому вы не обновляете 500 пользователей, вы обновляете 1 + 2 + ... + 500 пользователей (125 000 пользователей)) ..

На самом деле вам не нужны окончательные данные.

for ls in json_ls:
    lot = ls.get("lot_number")
    url = url + lotnumber                                                
    response = requests.patch(url, data=json.dumps({'users': [ {'user_id':ls['user_id'], 'status': 'ready'}]}), headers=headers)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...