Рекомендация: отправьте несколько файлов в конечную точку отдыха, используя запросы Python - PullRequest
0 голосов
/ 25 февраля 2019

Каков наилучший способ отправки большого количества запросов POST на конечную точку REST через Python?Например, я хочу загрузить ~ 500k файлов в базу данных.

То, что я до сих пор делал, - это цикл, который создает для каждого файла новый запрос, используя пакет запросов.

# get list of files
files = [f for f in listdir(folder_name)]
# loop through the list 
for file_name in files:
   try: 
      # open file and get content
      with open(folder_name + "\\" + file_name, "r") as file:
         f = file.read()
         # create request
         req = make_request(url, f)

         # error handling, logging, ...

Но так как это довольно медленно: как лучше всего это сделать?Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Первое, что вы хотите сделать, это точно определить, какая часть вашего сценария является узким местом.Здесь у вас есть как дисковый, так и сетевой ввод (чтение файлов и отправка HTTP-запросов соответственно).

Предполагая, что HTTP-запросы являются фактическим узким местом (весьма вероятно), рассмотрите возможность использования aiohttp вместо запросов.В документах есть несколько хороших примеров, с которых можно начать, а также множество статей о «Быстрый старт».Это позволит вашим сетевым запросам работать совместно, а это означает, что другой код Python может выполняться, пока один из ваших сетевых запросов ожидает.Просто будьте осторожны, чтобы не перегружать сервер, получающий запросы.

0 голосов
/ 25 февраля 2019

Первый подход:

Я не знаю, является ли лучшим способом разделять файлы на партии по 1000, архивировать их и отправлять в виде запросов с использованием потоков (установите число потоков = число процессоров)cores *

(остальная конечная точка может извлечь заархивированное содержимое и затем обработать его)

второй подход:

архивировать файлы в пакетах и ​​передавать их в пакетах послепередача завершена, проверьте на стороне сервера, а затем начните загрузку базы данных за один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...