@kiddle

Для чего нужен Semaphore?

Здравствуйте, я новичок в асинхронном программирование. Объясните, пожалуйста, что делает Semaphore?
async def fetch(url, session):
    async with session.get(url) as response:
        return await responce.text()

async def bound_fetch(sem, url, session):
    async with asyncio.Semaphore(1000):
        await fetch(url, session)

async def run(r):
    tasks = []
    async with ClientSession() as session:
        for i in range(10000):
            task = asyncio.ensure_future(bound_fetch(sem, url.format(i), session))
            tasks.append(task)
        return await asyncio.gather(*tasks)

loop = asyncio.get_event_loop()
future = asyncio.ensure_future(run(number))
loop.run_until_complete(future)
  • Вопрос задан
  • 4001 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Anton_Abrosimov
Предположим, что тебе надо загрузить 1000 страниц в 10 потоков.
Семафор позволяет установить ограничение в 10 потоков.

Другими словами. Это ограничение числа одновременно исполняемых задач.

В коде, вероятно, ошибка:
await fetch(url, session)

return await fetch(url, session)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы