TaskManager - Сервис для запуска и конфигурирования пользовательских задач¶
-
class
axipy.concurrent.
TaskManager
(progress_element_factory=<axipy.concurrent.TaskManager.ProgressElementFactory object>)¶ Сервис, содержащий вспомогательные функции для запуска и конфигурирования пользовательских задач.
-
generate_dialog_for_task
(task, spec)¶ Возвращает диалог, следящий за выполнением задачи.
- Параметры
task (
AxipyTask
) – Пользовательская задача.spec (
ProgressSpecification
) – Описание задачи.
- Тип результата
- Результат
Диалог, который будет отображать прогресс выполнения задачи.
def user_heavy_func(ph: AxipyProgressHandler, arg1: str, arg2: str): print(arg1 + arg2) # Создаём задачу из пользовательской функции и передаём необходимые # аргументы task = AxipyAnyCallableTask(user_heavy_func, "Длительная ", "задача") spec = ProgressSpecification(description="Длительная задача") dialog = task_manager.generate_dialog_for_task(task, spec) # Ставим задачу в очередь на выполнение task_manager.start_task(task) # Показываем диалог с прогрессом пока не завершилась задача dialog.exec_()
-
run_and_get
(spec, func, *args, **kwargs)¶ Превращает пользовательскую функцию в задачу и запускает её с отображением прогресса выполнения.
- Параметры
spec (
ProgressSpecification
) – Описание задачи.func (
Callable
) – Пользовательская функция, которая будет выполняться. В нее передается список args и словарь kwargs.args – Список аргументов, передаваемый в функцию при запуске.
kwargs – Словарь, передаваемый в функцию при запуске.
- Тип результата
- Результат
Результат выполнения пользовательской функции или None при ошибке.
def user_heavy_function(ph: AxipyProgressHandler, count: int): # Вначале задаём верхнюю планку изменения прогресса ph.set_max_progress(count) for i in range(0, count): if ph.is_canceled(): break # Тут делаем длительные вычисления ph.add_progress(1) return ph.progress() spec = ProgressSpecification( description="Длительная операция", flags=ProgressGuiFlags.CANCELABLE) times = 6 real_times = task_manager.run_and_get(spec, user_heavy_function, times) # выводим колличество раз которое отработал цикл внутри print(real_times)
-
run_in_gui
(func, *args, **kwargs)¶ Выполняет переданную задачу в потоке интерфейса.
Это может быть удобно когда в процессе выполнения длительной фоновой задачи нужно спросить о чем нибудь пользователя отобразив диалог. Так же создавать/взаимодействовать с некоторыми объектами можно только из потока интерфейса.
- Тип результата
-
start_task
(task)¶ Добавляет переданную задачу в очередь на выполнение.
- Параметры
task – Пользовательская задача.
def user_function(message: str): print(message) task = AxipyAnyCallableTask(user_function, "Hi, world!") # Т.к. мы не управляем прогрессом, то можно отключить передачу # обработчика в функцию task.with_handler(False) task_manager.start_task(task)
-