Почему одновременные запросы http занимают столько же времени, сколько и сравнение с последовательным выполнением? - PullRequest
0 голосов
/ 09 декабря 2018

Я узнал о параллельном выполнении в python3.
Я понятия не имею, почему следующие функции http-запроса занимают столько же времени, сколько и одно использование concurrent.futures.ThreadPoolExection, а другое - нет.

import urllib.request as ur
import concurrent.futures

def concurrent_exe(): # concurrent exection function that use ThreadPoolExecutor. 
    thread_pool_exe = concurrent.futures.ThreadPoolExecutor()
    for v in range(10000):
        future = thread_pool_exe.submit(access_example)
        print(v, future.result())

def access_example():
    return ur.urlopen("http://example.com").read().decode("utf-8")[10:15]

def seq_exe(): # sequential exectute function
    for v in range(10000):
        print(v, access_example())

Я не знаю, почему эти функции занимают почти одно и то же время.

Моя среда:

  • Python 3.6

  • Ubuntu 18.10на виртуальном ящике (ОС хоста: Windows10 1803)

1 Ответ

0 голосов
/ 09 декабря 2018

Я знаю, что я должен изменить в своем коде.future.result - это метод блокировки.поэтому следует дождаться финиша первого будущего.

def concurrent_exe():
    futures_list = []
    thread_pool_exe = concurrent.futures.ThreadPoolExecutor()
    for v in range(10000):
        future = thread_pool_exe.submit(access_example, v)
        futures_list.append(future)
    for v in concurrent.futures.as_completed(futures_list):
        print(v.result())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...