1. 20 Feb, 2018 1 commit
  2. 19 Dec, 2017 1 commit
  3. 15 Dec, 2017 1 commit
    • Paul Sokolovsky's avatar
      py/objgenerator: Allow to pend an exception for next execution. · 63644016
      Paul Sokolovsky authored
      This implements .pend_throw(exc) method, which sets up an exception to be
      triggered on the next call to generator's .__next__() or .send() method.
      This is unlike .throw(), which immediately starts to execute the generator
      to process the exception. This effectively adds Future-like capabilities
      to generator protocol (exception will be raised in the future).
      
      The need for such a method arised to implement uasyncio wait_for() function
      efficiently (its behavior is clearly "Future" like, and normally would
      require to introduce an expensive Future wrapper around all native
      couroutines, like upstream asyncio does).
      
      py/objgenerator: pend_throw: Return previous pended value.
      
      This effectively allows to store an additional value (not necessary an
      exception) in a coroutine while it's not being executed. uasyncio has
      exactly this usecase: to mark a coro waiting in I/O queue (and thus
      not executed in the normal scheduling queue), for the purpose of
      implementing wait_for() function (cancellation of such waiting coro
      by a timeout).
      63644016