FlatCAMWorker.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. ############################################################
  2. # FlatCAM: 2D Post-processing for Manufacturing #
  3. # http://caram.cl/software/flatcam #
  4. # Author: Juan Pablo Caram (c) #
  5. # Date: 2/5/2014 #
  6. # MIT Licence #
  7. ############################################################
  8. import threading
  9. import Queue
  10. class Worker(threading.Thread):
  11. """
  12. Implements a queue of tasks to be carried out in order
  13. in a single independent thread.
  14. """
  15. def __init__(self):
  16. super(Worker, self).__init__()
  17. self.queue = Queue.Queue()
  18. self.stoprequest = threading.Event()
  19. def run(self):
  20. while not self.stoprequest.isSet():
  21. try:
  22. task = self.queue.get(True, 0.05)
  23. self.do_task(task)
  24. except Queue.Empty:
  25. continue
  26. @staticmethod
  27. def do_task(task):
  28. task['fcn'](*task['params'])
  29. return
  30. def add_task(self, target, params=list()):
  31. self.queue.put({'fcn': target, 'params': params})
  32. return
  33. def join(self, timeout=None):
  34. self.stoprequest.set()
  35. super(Worker, self).join()