Почему существует большая разница в производительности между этими двумя простыми многопоточными кодами Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему существует большая разница в производительности между этими двумя простыми многопоточными кодами Python?

Сообщение Anonymous »

Давайте рассмотрим этот код Python:

Код: Выделить всё

def process_payload(payload, url, headers):
response = requests.post(url, headers=headers, json=payload)
return response

def parallel_group2(payloads, url, headers):
with ThreadPoolExecutor() as executor:
results = executor.map(process_payload,payloads, [url]*len(payloads), [headers]*len(payloads))
return list(results)

def parallel_group(payloads, url, headers):
with ThreadPoolExecutor() as executor:
results = executor.map(requests.post, [url]*len(payloads), [headers]*len(payloads), payloads)
return list(results)

times = []
# payloads grouped by 15
payloads_grouped = [payloads[i:i+15] for i in range(0, len(payloads), 15)]
print( "shape of payloads_grouped", len(payloads_grouped), " x ", len(payloads_grouped[0]))
for i in range(3):
start = time.time()
with ThreadPoolExecutor() as executor:
# results = executor.map(parallel_group2, payloads_grouped, [url]*len(payloads_grouped), [headers]*len(payloads_grouped))
results = executor.map(parallel_group, payloads_grouped, [url]*len(payloads_grouped), [headers]*len(payloads_grouped))
end = time.time()
times.append(end-start)
print( "Durations of iterations:", times)
print( "Durations of iterations:", times)
print( "Average time for 150 requests:", sum(times)/len(times))
Когда я запускаю скрипт с Parallel_group, я получаю такие результаты очень стабильно:

Код: Выделить всё

Durations of iterations: [5.246389389038086, 5.195073127746582, 5.278628587722778]
Average time for 150 requests: 5.2400303681691485
Когда я запускаю его с помощью Parallel_group2, результаты выглядят примерно так:

Код: Выделить всё

Durations of iterations: [10.99542498588562, 9.43007493019104, 23.003321170806885]
Average time for 150 requests: 10.142940362294516
Кто-нибудь обладает хорошими знаниями в многопоточности Python и может объяснить, почему существует такая разница между многопоточными вызовами request.post и вызовами функции, которая просто выполняет Request.call? Я вообще ничего не понимаю.
Я запускал предыдущий код несколько раз, и результаты были стабильными.

Подробнее здесь: https://stackoverflow.com/questions/792 ... n-multithr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»