You specify it a 'get' function and it runs a thread and gets it for you. Incredibly simple.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import _thread as thread
class AsyncGetter:
def __init__(self, method, args=()):
self.method = method
self.gotten = False
self.args = args
thread.start_new_thread(self.doGet, ())
def doGet(self):
self.result = self.method(*self.args)
self.gotten = True
def hasGotten(self):
return self.gotten
def getResult(self):
return self.result
|
Tags: asynchronous, getting
self.result is undefined leading to unexpected AttributeError if getResult() is called before async method returns. A better pattern could be to add a timeout argument to getResult() that waits on a multiprocessing.Semaphore and raises a custom exception if the result is not returned in the required timeout. Without the following modification, async exceptions will not be propagated: Another good feature would be to try/except round line #12 to capture any async exception which could then be directly raised by getResult() if applicable.