Может ли модуль многопоточности и запросов Python достичь параллелизма? - PullRequest
0 голосов
/ 25 декабря 2018

Второй пример кода ниже работает быстрее, чем первый пример.Означает ли это, что запросы и потоки могут достичь параллелизма?Я знаю Асинсио и Гевента.Я просто хочу знать, означает ли это параллелизм.

code1

import requests,time
s1=time.time()
def a():
    b=requests.get('http://www.baidu.com').text
for i in range(100):
    print(i)
    a()
print(time.time()-s1)

code2

import requests,threading,queue,time
s1=time.time()

def a(i):
    print(i)
    b=requests.get('http://www.baidu.com').text

tl=[]
for j in range(100):
    t=threading.Thread(target=a,args=(j,))
    t.start()
    tl.append(t)

for k in tl:
    k.join()
print(time.time()-s1)

1 Ответ

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

Прежде всего, параллелизм в программировании означает выполнение нескольких задач независимым образом, когда задача 2 для запуска не нуждается в завершении задачи 1.Это не имеет ничего со скоростью.Поэтому, конечно, потоки Python являются параллельными.

Вы спрашиваете о параллелизме , если запросы выполняются буквально в одно и то же время.

И да, ваши запросыэффективно выполняются параллельно.

Глобальная блокировка интерпретатора Python предотвращает параллельное выполнение только кода Python.В вашем случае код Python - последовательная часть - обходит очень быстро, почти 100% времени уходит на ожидание HTTP-запросов и ответов, передаваемых по сети.Таким образом, вы можете пренебречь задержкой, вызванной глобальной блокировкой, и назвать ее параллельной.

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