Как ограничить число потоков или задач для доступа к ресурсу в определенное время
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 потоков/задач смогут работать с ресурсом одновременно.