def _disposable_and_async_gen_from_obs(obs: Observable, loop): """ Compatability layer for legacy Observable to async generator This should be removed and subscription resolvers changed to return async generators after removal of flask & gevent based dagit. """ queue: Queue = Queue() # process observable in a thread, handle results in aio loop disposable = obs.subscribe_on(thread_pool_scheduler).subscribe( on_next=lambda i: loop.call_soon_threadsafe(queue.put_nowait, i)) async def async_gen(): while True: i = await queue.get() yield i return disposable, async_gen()