Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. import asyncio
  2. from concurrent.futures import Executor
  3. from typing import AsyncGenerator, AsyncIterable, Generator, Iterable, TypeVar
  4.  
  5. T = TypeVar('T')
  6.  
  7.  
  8. async def iter2asynciter(
  9. iterable: Iterable[T],
  10. *,
  11. loop: asyncio.AbstractEventLoop = None,
  12. executor: Executor = None) -> AsyncGenerator[T, None]:
  13. if loop is None:
  14. loop = asyncio.get_running_loop()
  15. sentinel = object()
  16. iterator = iter(iterable)
  17.  
  18. future = loop.run_in_executor(executor, next, iterator, sentinel)
  19. while True:
  20. v = await future
  21. if v is sentinel:
  22. break
  23. future = loop.run_in_executor(executor, next, iterator, sentinel)
  24. yield v
  25.  
  26.  
  27. def asynciter2iter(
  28. asynciterable: AsyncIterable[T],
  29. *,
  30. loop: asyncio.AbstractEventLoop) -> Generator[T, None, None]:
  31. asynciterator = asynciterable.__aiter__()
  32.  
  33. future = asyncio.run_coroutine_threadsafe(asynciterator.__anext__(), loop)
  34. while True:
  35. try:
  36. v = future.result()
  37. except StopAsyncIteration:
  38. break
  39. else:
  40. future = asyncio.run_coroutine_threadsafe(asynciterator.__anext__(), loop)
  41. yield v
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement