Как предлагается в комментарии, есть пример с использованием aiohttp
и asyncio
:
def main():
# limit concurrency
loop = asyncio.get_event_loop()
connector = aiohttp.TCPConnector(limit=100)
# login if required
async with aiohttp.ClientSession(loop=loop, connector=connector) as sess:
async with sess.post(
LOGIN_URL, data=payload) as resp:
# ensure login success
assert resp.status == 200
for url in download_links:
await download(url, sess)
И ваша функция загрузки выглядит так:
async def download(url, sess):
async with sess.get(url) as resp:
if resp.status == 200:
# post process
Наконец, используйте основной цикл:
loop = asyncio.get_event_loop()
loop.run_until_complete(main())