├── README.md └── work.py /README.md: -------------------------------------------------------------------------------- 1 | # WorkOnPy -------------------------------------------------------------------------------- /work.py: -------------------------------------------------------------------------------- 1 | import threading 2 | import queue 3 | import random 4 | import time 5 | 6 | # Задачи в офисе с приоритетами 7 | class Task: 8 | def __init__(self, task_id, priority, description): 9 | self.task_id = task_id 10 | self.priority = priority 11 | self.description = description 12 | 13 | def __repr__(self): 14 | return f"Task {self.task_id} (Priority {self.priority}): {self.description}" 15 | 16 | # Рабочий, который выполняет задачи 17 | class Worker(threading.Thread): 18 | def __init__(self, worker_id, task_queue): 19 | threading.Thread.__init__(self) 20 | self.worker_id = worker_id 21 | self.task_queue = task_queue 22 | self.daemon = True 23 | 24 | def run(self): 25 | while True: 26 | # Блокируемся до получения задачи 27 | task = self.task_queue.get() 28 | if task is None: # Завершаем поток 29 | break 30 | print(f"Worker {self.worker_id} is working on {task}") 31 | time.sleep(random.randint(1, 3)) # Время на выполнение задачи 32 | print(f"Worker {self.worker_id} finished {task}") 33 | self.task_queue.task_done() 34 | 35 | # Менеджер, который создает задачи 36 | class TaskManager: 37 | def __init__(self, num_workers): 38 | self.task_queue = queue.PriorityQueue() # Очередь с приоритетами 39 | self.workers = [] 40 | for i in range(num_workers): 41 | worker = Worker(i + 1, self.task_queue) 42 | self.workers.append(worker) 43 | worker.start() 44 | 45 | def create_task(self, task_id, priority, description): 46 | task = Task(task_id, priority, description) 47 | self.task_queue.put((priority, task)) # Задачи с более низким числом имеют более высокий приоритет 48 | print(f"Created {task}") 49 | 50 | def wait_for_completion(self): 51 | self.task_queue.join() # Ожидаем, пока все задачи не будут выполнены 52 | 53 | def stop_workers(self): 54 | # Останавливаем всех работников 55 | for _ in self.workers: 56 | self.task_queue.put(None) 57 | 58 | # Пример работы 59 | if __name__ == "__main__": 60 | task_manager = TaskManager(num_workers=3) 61 | 62 | # Создаем задачи с разными приоритетами 63 | task_manager.create_task(1, priority=2, description="Prepare meeting agenda") 64 | task_manager.create_task(2, priority=1, description="Reply to emails") 65 | task_manager.create_task(3, priority=3, description="Write project report") 66 | task_manager.create_task(4, priority=1, description="Update documentation") 67 | task_manager.create_task(5, priority=2, description="Plan team building event") 68 | 69 | task_manager.wait_for_completion() # Ожидаем завершения всех задач 70 | task_manager.stop_workers() # Останавливаем рабочие потоки 71 | print("All tasks completed.") 72 | --------------------------------------------------------------------------------