Встречается на собеседованиях • сегодня

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

Для ограничения числа потоков/задач, работающих с ресурсом одновременно, можно использовать threading.Semaphore или asyncio.Semaphore в зависимости от типа кода (синхронный/асинхронный).

Пример с threading.Semaphore:

python
import threading

semaphore = threading.Semaphore(3)  # Макс 3 потока одновременно

def access_resource():
with semaphore:
print(f"Работает поток {threading.current_thread().name}")
# Код работы с ресурсом

text

**Пример с asyncio.Semaphore:**  
```python
import asyncio

semaphore = asyncio.Semaphore(3)  # Макс 3 задачи одновременно

async def access_resource():
    async with semaphore:
        print("Задача получила доступ")
        # Асинхронная работа с ресурсом

Принцип работы:

  • Семафор создается с указанием максимального числа "разрешений".
  • При входе в контекст (with/async with) поток/задача захватывает разрешение.
  • Если разрешений нет — поток/задача блокируется до освобождения.

Это гарантирует, что не больше N потоков/задач смогут работать с ресурсом одновременно.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы