class RunInThread(Thread): """ """ def __init__(self, action, *args, **kwargs): """Инициализация потока""" log.info("Init:") # print("Thread Init") Thread.__init__(self) self.result = None self.event = Event() self.action = action self._args = args self._kwargs = kwargs def run(self): """Запуск потока""" # print("Thread Act Run") log.info("Act Run") try: self.result = self.action(*self._args, **self._kwargs) except Exception as e: # print("Err: thread Act: {}".format(e)) log.info("Act: ERROR {}".format(e)) pass self.event.set() # print("Thread Act Done") log.info("Act: Done")
async def main(): event = Event() asyncio.create_task(waiter(event)) await asyncio.sleep(2) print('Setting event') event.set() await asyncio.sleep(1) # Caller can check if event has been cleared print('Event is {}'.format('set' if event.is_set() else 'clear'))
class Pending: def __init__(self): self._ev = Event() self._res = None async def get(self): await self._ev.wait() self._ev.clear() # TODO: race condition? if isinstance(self._res, OSError): raise self._res else: return self._res def signal(self, result): self._res = result self._ev.set()
async def set_after_timeout(event: uasyncio.Event, timeout: float): await uasyncio.sleep(timeout) event.set()