core-extra/daemon/core/gui/task.py
2020-01-14 14:02:37 -08:00

35 lines
992 B
Python

import logging
import threading
from typing import TYPE_CHECKING, Callable
if TYPE_CHECKING:
from core.gui.app import Application
class BackgroundTask:
def __init__(
self, master: "Application", task: Callable, callback: Callable = None, args=()
):
self.master = master
self.args = args
self.task = task
self.callback = callback
self.thread = None
def start(self):
logging.info("starting task")
self.thread = threading.Thread(target=self.run, daemon=True)
self.thread.start()
def run(self):
result = self.task(*self.args)
logging.info("task completed")
if self.callback:
if result is None:
args = ()
elif isinstance(result, (list, tuple)):
args = result
else:
args = (result,)
logging.info("calling callback: %s", args)
self.master.after(0, self.callback, *args)