| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import threading
- from .interface import show_message
- import time
- class Task(threading.Thread):
- def __init__(self, buffer, callback=None, title=None, *args, **kwargs):
- self.buffer = buffer
- self._stop = threading.Event()
- self.result = None
- self.callback = callback
- self.done = 0
- self.finished = False
- self.title = title
- threading.Thread.__init__(self, *args, **kwargs)
- def run(self):
- " Run tasks. "
- self._Thread__target(task=self, *self._Thread__args, **self._Thread__kwargs)
- # Wait for result parsing
- while not self.stopped():
- time.sleep(.2)
- def stop(self):
- " Stop task. "
- self._stop.set()
- def stopped(self):
- return self._stop.isSet()
- def stop_queue():
- " Stop all tasks. "
- for thread in threading.enumerate():
- if isinstance(thread, Task):
- thread.stop()
- show_message('%s stopped.' % thread.title)
- def add_task(target, callback=None, buffer=None, title=None, *args, **kwargs):
- " Add all tasks. "
- task = Task(buffer, title=title, target=target, callback=callback, args=args, kwargs=kwargs)
- task.daemon = True
- task.start()
- show_message('%s started.' % task.title)
- def check_task():
- " Check tasks for result. "
- for thread in threading.enumerate():
- if isinstance(thread, Task):
- if thread.finished:
- thread.stop()
- thread.callback(thread.result)
- else:
- show_message('%s %s%%' % (thread.title, thread.done))
|