| 12345678910111213141516171819202122232425262728293031323334 |
- import asyncio
- import logging
- logger = logging.getLogger(__name__)
- class AsyncUniqueQueue:
- def __init__(self):
- self.queue = asyncio.Queue()
- self.set = set()
- self.lock = asyncio.Lock()
- async def put(self, item):
- async with self.lock:
- if item not in self.set:
- self.set.add(item)
- await self.queue.put(item)
- else:
- logger.debug(f"Item {item.__hash__()} already in queue.")
- async def get(self):
- item = await self.queue.get()
- async with self.lock:
- self.set.remove(item)
- return item
- def qsize(self):
- return self.queue.qsize()
- async def empty(self):
- return self.queue.empty()
- def task_done(self):
- self.queue.task_done()
|