mirror of
				https://github.com/Garmelon/PFERD.git
				synced 2025-10-31 12:52:43 +01:00 
			
		
		
		
	Implement limiter
This commit is contained in:
		
							
								
								
									
										19
									
								
								PFERD/limiter.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								PFERD/limiter.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | import asyncio | ||||||
|  | from contextlib import AbstractAsyncContextManager, asynccontextmanager | ||||||
|  | from typing import AsyncIterator | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Limiter: | ||||||
|  |     def __init__(self, limit: int = 10): | ||||||
|  |         self._semaphore = asyncio.Semaphore(limit) | ||||||
|  |  | ||||||
|  |     @asynccontextmanager | ||||||
|  |     async def _context_manager(self) -> AsyncIterator[None]: | ||||||
|  |         await self._semaphore.acquire() | ||||||
|  |         try: | ||||||
|  |             yield | ||||||
|  |         finally: | ||||||
|  |             self._semaphore.release() | ||||||
|  |  | ||||||
|  |     def limit(self) -> AbstractAsyncContextManager[None]: | ||||||
|  |         return self._context_manager() | ||||||
		Reference in New Issue
	
	Block a user
	 Joscha
					Joscha