Comments 3
Стоп! А где потоковая обработка данных с помощью aiohttp? Там надо либо надо указывать размер чанков в response.content.read(), либо использовать возможности асинхронного итератора
Старый добрый gevent –
import gevent.monkey
gevent.monkey.patch_all()
TRIES = 150
session1 = requests.Session()
with report_time("Session+gevent"):
gevent.joinall(
[gevent.spawn(session1.get, URL) for _ in range(TRIES)]
)
from gevent.pool import Pool
session2 = requests.Session()
with report_time("Session+geventPool"):
pool = Pool(TRIES)
for _ in range(TRIES):
pool.spawn(session2.get, URL)
pool.join()
from geventhttpclient import HTTPClient
from geventhttpclient.url import URL as UUURL
with report_time("geventhttpclient"):
url = UUURL(URL)
http = HTTPClient.from_url(url, concurrency=TRIES)
pool = Pool(TRIES)
for _ in range(TRIES):
pool.spawn(http.get, URL)
pool.join()
Time needed for `FuturesSession w/ max workers' called: 1.79s
Time needed for `aiohttp' called: 2.20s
Time needed for `Session+gevent' called: 2.28s
Time needed for `Session+geventPool' called: 2.89s
Time needed for `geventhttpclient' called: 1.42s
Постоянные соединения стали стандартом начиная с HTTP 1.1, но многие приложения до сих пор их не применяют.
Начиная с Python 3.5 в стандартные возможности языка входят средства асинхронного программирования с использованием asyncio.
Миллениалы 10х питон-разработчики открывают для себя возможности System.Net.HttpClient из начала десятилетия.
Sign up to leave a comment.
Python и быстрые HTTP-клиенты