Python 3 продвигает запрос после передачи параметров заголовка и данных - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь сделать свои почтовые запросы быстрее, потому что в данный момент это занимает 3 секунды на пост. Поскольку мне нужно повторить это n раз, это может занять несколько часов. Итак, я начал искать потоки, асинхронные вызовы и многие другие, но ни один из них не решил мою проблему. Главным образом проблемы были связаны с тем, что я не смог указать заголовки и параметры моего почтового запроса.

Моя версия Python - 3.6.7

Мой код:

for i in range(0, 1000):
  assetId = jsonAssets[i]['id']
  uuidValue = uuid.uuid4()

  headers = {'Content-Type': 'application/json',}
  params = (('remember_token', '123456'),)

  data = ('{{"asset":'
          '{{"template":1,'
          '"uuid":"{uuidValue}", '
          '"assetid":{assetId}}}}}'
          .format(uuidValue = uuidValue, 
                  assetId = assetId))
  response = requests.post('http://localhost:3000/api/v1/assets', headers=headers, params=params, data=data)

Некоторые попытки использовали:

pool.apply_async

или

ThreadResponse

Но я не мог установить заголовки или параметры, как в request.post

Итак, как я могу сделать этот пост-запрос, используя этот заголовок, параметры и данные быстрее?

Заранее спасибо и извините за любые проблемы, это мой первый пост stackoverflow.

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Если вы можете правильно сделать один запрос, кратчайший путь для вас - использовать ThreadPoolExecutor :

def single_request(i):
  assetId = jsonAssets[i]['id']
  uuidValue = uuid.uuid4()
  # ... all other requests stuff here

  return response


with ThreadPoolExecutor(max_workers=10) as executor:
    futures = {
        executor.submit(single_request, i): i
        for i 
        in range(1000)
    }

    for future in as_completed(futures):
        i = futures[future]
        try:
            res = future.result()
        except Exception as exc:
            print(f'excepiton in {i}: {exc}')
        else:
            print(res.text)
0 голосов
/ 05 января 2019

Вы должны использовать асинхронные библиотеки, такие как aiohttp

...