code: def run(self, target, callback = None, name = None, complete = None, *args, **kargs):
          
          self.count_lock.acquire()
          if not self.workers:
              self.count_lock.release()
              self.add(name = name)
          else:
              self.count_lock.release()
          self.tasks.put((target, callback, name, complete, args, kargs))
docs: Start task.
          @target: callable to run with *args and **kargs arguments.
          @callback: callable executed after target.
          @name: thread name
          @complete: complete executed after target in finally