Создание древовидных задач с многопроцессорной обработкой ⇐ Python
Создание древовидных задач с многопроцессорной обработкой
Я пытаюсь создать приложение, которое создает задачи, и указанные задачи могут создавать дочерние задачи или в конечном итоге завершаться.
Это не работает, поскольку говорится: «Объекты пула не могут передаваться между процессами или консервироваться»
Любая помощь будет оценена
импортировать многопроцессорный процесс как mp импортировать случайный время импорта defgenerate_weighted_random_task_list(): num = random.choices([0, 1, 2, 3], веса=[70, 10, 10, 10], k=1)[0] если число == 0: вернуть ["завершено"] еще: return [f"Задача {i+1}" для i в диапазоне (число)] класс Задача: defsolve_task(я, задача): возвратитеgenerate_weighted_random_task_list() класс TaskNode: def __init__(self, Task_key, цель): self.task_key = Task_key self.goal = цель self.дети = [] def выполнить(self, пул): # Передать централизованный пул в качестве аргумента агент = Задача() sub_tasks = агент.resolve_task(self.goal) если sub_tasks == ["завершено"]: вернуть self.task_key + «закончено» себя.дети = [ TaskNode(self.task_key + "_" + str(i), sub_task) для i, sub_task в перечислении (sub_tasks) ] # Использование централизованного пула вместо создания нового результаты = пул.карта( лямбда-дочерний элемент: child.execute(пул), self.children ) # Передаем пул вниз распечатать(результаты) return [элемент для подсписка в результатах для элемента в подсписке] с mp.Pool(processes=1) в качестве пула: root_task = TaskNode("1", "Выполнить задачу") results = root_task.execute(pool) # Запуск выполнения из централизованного пула распечатать(результаты)
Я пытаюсь создать приложение, которое создает задачи, и указанные задачи могут создавать дочерние задачи или в конечном итоге завершаться.
Это не работает, поскольку говорится: «Объекты пула не могут передаваться между процессами или консервироваться»
Любая помощь будет оценена
импортировать многопроцессорный процесс как mp импортировать случайный время импорта defgenerate_weighted_random_task_list(): num = random.choices([0, 1, 2, 3], веса=[70, 10, 10, 10], k=1)[0] если число == 0: вернуть ["завершено"] еще: return [f"Задача {i+1}" для i в диапазоне (число)] класс Задача: defsolve_task(я, задача): возвратитеgenerate_weighted_random_task_list() класс TaskNode: def __init__(self, Task_key, цель): self.task_key = Task_key self.goal = цель self.дети = [] def выполнить(self, пул): # Передать централизованный пул в качестве аргумента агент = Задача() sub_tasks = агент.resolve_task(self.goal) если sub_tasks == ["завершено"]: вернуть self.task_key + «закончено» себя.дети = [ TaskNode(self.task_key + "_" + str(i), sub_task) для i, sub_task в перечислении (sub_tasks) ] # Использование централизованного пула вместо создания нового результаты = пул.карта( лямбда-дочерний элемент: child.execute(пул), self.children ) # Передаем пул вниз распечатать(результаты) return [элемент для подсписка в результатах для элемента в подсписке] с mp.Pool(processes=1) в качестве пула: root_task = TaskNode("1", "Выполнить задачу") results = root_task.execute(pool) # Запуск выполнения из централизованного пула распечатать(результаты)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Правильно разорвать процесс при использовании pytest с многопроцессорной обработкой.
Anonymous » » в форуме Python - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-