feat: implement legacy shop management system and add task documentation files
CI Check / lint-and-check (push) Failing after 9s
CI Check / lint-and-check (push) Failing after 9s
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
### Задача 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`.
|
||||
Reference in New Issue
Block a user