Files
Igor-kr/Final control/10/TASK.md
T
Dmitry Belan ee235ece10
CI Check / lint-and-check (push) Failing after 9s
feat: implement legacy shop management system and add task documentation files
2026-07-18 12:25:32 +03:00

26 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### Задача 10. Многопоточность и очереди (Threading, Queue, Синхронизация)
Напишите программу для обработки задач в нескольких потоках:
1. **Класс `Worker`:**
- В `__init__(self, name, queue)` сохраните имя рабочего и очередь задач
- Метод `run(self)` — бесконечный цикл: берет задачу из очереди (`queue.get()`), обрабатывает её (просто выводит `"Worker {name} обрабатывает: {task}"`), делает `time.sleep(1)` для имитации работы, затем вызывает `queue.task_done()`
2. `create_workers(count, queue)` — создает `count` объектов `Worker`, запускает каждого в отдельном потоке (`threading.Thread`) с `daemon=True`. Возвращает список потоков.
3. `process_tasks(tasks, worker_count=3)` — принимает список задач:
- Создает очередь `queue.Queue()`
- Добавляет все задачи в очередь
- Создает рабочих через `create_workers`
- Ждет завершения всех задач через `queue.join()`
- Выводит *"Все задачи обработаны"*
**Тесты:**
1. Создайте список из 10 задач: `["Задача 1", "Задача 2", ..., "Задача 10"]`
2. Запустите обработку с 3 рабочими потоками
3. Убедитесь, что задачи распределяются между потоками
4. Замерьте время выполнения (должно быть ~4 секунды для 10 задач с 3 потоками)
**Подсказка:** Импортируйте `import threading`, `import queue`, `import time`.