Ускорение ожидаемого вызова на запросы .post () - PullRequest
0 голосов
/ 21 января 2020

У меня есть функция, которая создает несколько сотен json запросов объектов и сохраняет их в списке, а затем я oop через этот список отправляю все эти запросы на их целевой URL, по одному за раз. Этот процесс занимает 10-15 минут.

Есть ли альтернативный подход, который бы ускорил это?

Вот мой l oop:

for x in range(0,len(request_payload)-1):
    # format the request as json
    data = json.dumps(request_payload[x])
    # send the request
    requests.post(url='https://URL_REMOVED/conversion', data=data, headers=headers)

1 Ответ

0 голосов
/ 21 января 2020

Вот некоторый частично написанный код, чтобы дать вам идею. Вам нужно определить функцию, которая делает то, что вы хотите, а затем запустить несколько потоков, которые выполняют эту функцию. Единственная сложность заключается в том, что вам нужно разделить входы так, чтобы каждый поток обрабатывал подмножество ваших входов. Я использовал аккуратный трюк, который использовал раньше, чтобы генерировать уникальные кусочки вашего входного списка для каждого потока. Извиняюсь, если есть какие-либо опечатки, поскольку я напечатал это из памяти без тестирования.

Технически вам не нужна часть t.join в этом примере, но хорошо понять, как присоединиться к потокам (то есть ждать для них до fini sh).

from threading import Thread

def make_requests(list_of_requests):
    #your requests code here

threads=[]
num_threads = 10
for i in range(num_threads):
    threads.append(Thread(target=make_requests, args=(all_requests[i::num_threads],)))
    threads[i].start()

# block until all threads are done
for t in threads:
    t.join()

Это ускорит ваш код, потому что у вас будет параллельно работать несколько запросов - например, если сайту требуется 5 секунд для ответа на каждый запрос, десять запросов займет 50 секунд (плюс небольшое количество для вашего кода). Теперь это займет 5 секунд, плюс немного больше времени для вашего многопоточного кода. Когда у вас есть код, который тратит долгое время на ожидание ввода-вывода, многопоточность - хороший выбор.

...