コード例 #1
0
ファイル: graphql.py プロジェクト: trevenrawr/dagster
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()