Как ограничить число потоков или задач для доступа к ресурсу в определенное время

Python Junior Без компании
Как ограничить число потоков или задач для доступа к ресурсу в определенное время
Ответы
Для ограничения числа потоков/задач, работающих с ресурсом одновременно, можно использовать `threading.Semaphore` или `asyncio.Semaphore` в зависимости от типа кода (синхронный/асинхронный). **Пример с threading.Semaphore:** ``` import threading semaphore = threading.Semaphore(3) # Макс 3 потока одновременно def access_resource(): with semaphore: print(f"Работает поток {threading.current_thread().name}") # Код работы с ресурсом ``` **Пример с asyncio.Semaphore:** ``` import asyncio semaphore = asyncio.Semaphore(3) # Макс 3 задачи одновременно async def access_resource(): async with semaphore: print("Задача получила доступ") # Асинхронная работа с ресурсом ``` **Принцип работы:** - Семафор создается с указанием максимального числа "разрешений". - При входе в контекст (`with`/`async with`) поток/задача захватывает разрешение. - Если разрешений нет — поток/задача блокируется до освобождения. Это гарантирует, что не больше N потоков/задач смогут работать с ресурсом одновременно.