1.9 KiB
1.9 KiB
Задача 10. Многопоточность и очереди (Threading, Queue, Синхронизация)
Напишите программу для обработки задач в нескольких потоках:
-
Класс
Worker:- В
__init__(self, name, queue)сохраните имя рабочего и очередь задач - Метод
run(self)— бесконечный цикл: берет задачу из очереди (queue.get()), обрабатывает её (просто выводит"Worker {name} обрабатывает: {task}"), делаетtime.sleep(1)для имитации работы, затем вызываетqueue.task_done()
- В
-
create_workers(count, queue)— создаетcountобъектовWorker, запускает каждого в отдельном потоке (threading.Thread) сdaemon=True. Возвращает список потоков. -
process_tasks(tasks, worker_count=3)— принимает список задач:- Создает очередь
queue.Queue() - Добавляет все задачи в очередь
- Создает рабочих через
create_workers - Ждет завершения всех задач через
queue.join() - Выводит "Все задачи обработаны"
- Создает очередь
Тесты:
- Создайте список из 10 задач:
["Задача 1", "Задача 2", ..., "Задача 10"] - Запустите обработку с 3 рабочими потоками
- Убедитесь, что задачи распределяются между потоками
- Замерьте время выполнения (должно быть ~4 секунды для 10 задач с 3 потоками)
Подсказка: Импортируйте import threading, import queue, import time.