flatcam/FlatCAM_GTK/FlatCAMWorker.py

43 lines
1.3 KiB
Python

############################################################
# FlatCAM: 2D Post-processing for Manufacturing #
# http://caram.cl/software/flatcam #
# Author: Juan Pablo Caram (c) #
# Date: 2/5/2014 #
# MIT Licence #
############################################################
import threading
import Queue
class Worker(threading.Thread):
"""
Implements a queue of tasks to be carried out in order
in a single independent thread.
"""
def __init__(self):
super(Worker, self).__init__()
self.queue = Queue.Queue()
self.stoprequest = threading.Event()
def run(self):
while not self.stoprequest.isSet():
try:
task = self.queue.get(True, 0.05)
self.do_task(task)
except Queue.Empty:
continue
@staticmethod
def do_task(task):
task['fcn'](*task['params'])
return
def add_task(self, target, params=list()):
self.queue.put({'fcn': target, 'params': params})
return
def join(self, timeout=None):
self.stoprequest.set()
super(Worker, self).join()