Встречается на собеседованиях • сегодня
Как правильно организовать асинхронную обработку задач в системе с гильдой
Для асинхронной обработки задач с гильдией (пулом воркеров) в 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. Воркеры можно масштабировать, изменяя их количество
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы