Source code for aiter.sharable_aiter
import asyncio
[docs]class sharable_aiter:
"""
Not all iterators can have multiple consumers. For example, asynchronous
generators don't allow it. But if you wrap it with one of these,
you'll be okay.
"""
def __init__(self, aiter):
self._opened_aiter = aiter.__aiter__()
self._semaphore = asyncio.Semaphore()
def __aiter__(self):
return self
async def __anext__(self):
async with self._semaphore:
return await self._opened_aiter.__anext__()