Pull to refresh

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.