Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #
- # START ASYNC SETUP
- #
- import threading
- class TimeoutError(RuntimeError):
- pass
- class AsyncCall(object):
- def __init__(self, fnc, callback = None):
- self.Callable = fnc
- self.Callback = callback
- def __call__(self, *args, **kwargs):
- self.Thread = threading.Thread(target = self.run, name = self.Callable.__name__, args = args, kwargs = kwargs)
- self.Thread.start()
- return self
- def wait(self, timeout = None):
- self.Thread.join(timeout)
- if self.Thread.isAlive():
- raise TimeoutError()
- else:
- return self.Result
- def run(self, *args, **kwargs):
- self.Result = self.Callable(*args, **kwargs)
- if self.Callback:
- self.Callback(self.Result)
- class AsyncMethod(object):
- def __init__(self, fnc, callback=None):
- self.Callable = fnc
- self.Callback = callback
- def __call__(self, *args, **kwargs):
- return AsyncCall(self.Callable, self.Callback)(*args, **kwargs)
- def Async(fnc = None, callback = None):
- if fnc == None:
- def AddAsyncCallback(fnc):
- return AsyncMethod(fnc, callback)
- return AddAsyncCallback
- else:
- return AsyncMethod(fnc, callback)
- #
- # END ASYNC SETUP
- #
- @Async
- def doWorkAsync(light):
- try:
- power = light.get_power()
- light.set_power("on" if power == 0 else "off")
- except:
- print(sys.exc_info()[0]) # TODO replace with logging
- for light in self.lights:
- doWorkAsync(light)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement