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

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

Для асинхронной обработки задач с гильдией (пулом воркеров) в Python лучше использовать asyncio с asyncio.Queue. Вот пример:

python
import asyncio

async def worker(name: str, queue: asyncio.Queue):
    while True:
        task = await queue.get()
        print(f"Worker {name} processing task {task}")
        await asyncio.sleep(1)  # Имитация работы
        queue.task_done()

async def main():
queue = asyncio.Queue(maxsize=10)

text
# Создаем гильдию из 3 воркеров
workers = [
    asyncio.create_task(worker(f"worker-{i}", queue))
    for i in range(3)
]

# Добавляем задачи
for i in range(10):
    await queue.put(i)

await queue.join()  # Ждем завершения всех задач

# Отменяем воркеров
for w in workers:
    w.cancel()

asyncio.run(main())

text

Ключевые моменты:
1. Используем `asyncio.Queue` для безопасного обмена задачами
2. Каждый воркер - это асинхронная функция, работающая в бесконечном цикле
3. `queue.task_done()` сигнализирует о завершении задачи
4. `queue.join()` ожидает обработки всех задач
5. Воркеры можно масштабировать, изменяя их количество
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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