mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	asyncio: Remove asyncio.timeout() context manager.
It will probably be added back in Python 3.6, once its compatibility issues are resolved; see [1] for more details. [1] https://mail.python.org/pipermail/async-sig/2016-June/000045.html
This commit is contained in:
		
							parent
							
								
									af74512e44
								
							
						
					
					
						commit
						c1cf296de6
					
				
					 4 changed files with 0 additions and 260 deletions
				
			
		|  | @ -4,7 +4,6 @@ | |||
|            'FIRST_COMPLETED', 'FIRST_EXCEPTION', 'ALL_COMPLETED', | ||||
|            'wait', 'wait_for', 'as_completed', 'sleep', 'async', | ||||
|            'gather', 'shield', 'ensure_future', 'run_coroutine_threadsafe', | ||||
|            'timeout', | ||||
|            ] | ||||
| 
 | ||||
| import concurrent.futures | ||||
|  | @ -737,55 +736,3 @@ def callback(): | |||
| 
 | ||||
|     loop.call_soon_threadsafe(callback) | ||||
|     return future | ||||
| 
 | ||||
| 
 | ||||
| def timeout(timeout, *, loop=None): | ||||
|     """A factory which produce a context manager with timeout. | ||||
| 
 | ||||
|     Useful in cases when you want to apply timeout logic around block | ||||
|     of code or in cases when asyncio.wait_for is not suitable. | ||||
| 
 | ||||
|     For example: | ||||
| 
 | ||||
|     >>> with asyncio.timeout(0.001): | ||||
|     ...     yield from coro() | ||||
| 
 | ||||
| 
 | ||||
|     timeout: timeout value in seconds or None to disable timeout logic | ||||
|     loop: asyncio compatible event loop | ||||
|     """ | ||||
|     if loop is None: | ||||
|         loop = events.get_event_loop() | ||||
|     return _Timeout(timeout, loop=loop) | ||||
| 
 | ||||
| 
 | ||||
| class _Timeout: | ||||
|     def __init__(self, timeout, *, loop): | ||||
|         self._timeout = timeout | ||||
|         self._loop = loop | ||||
|         self._task = None | ||||
|         self._cancelled = False | ||||
|         self._cancel_handler = None | ||||
| 
 | ||||
|     def __enter__(self): | ||||
|         self._task = Task.current_task(loop=self._loop) | ||||
|         if self._task is None: | ||||
|             raise RuntimeError('Timeout context manager should be used ' | ||||
|                                'inside a task') | ||||
|         if self._timeout is not None: | ||||
|             self._cancel_handler = self._loop.call_later( | ||||
|                 self._timeout, self._cancel_task) | ||||
|         return self | ||||
| 
 | ||||
|     def __exit__(self, exc_type, exc_val, exc_tb): | ||||
|         if exc_type is futures.CancelledError and self._cancelled: | ||||
|             self._cancel_handler = None | ||||
|             self._task = None | ||||
|             raise futures.TimeoutError | ||||
|         if self._timeout is not None: | ||||
|             self._cancel_handler.cancel() | ||||
|             self._cancel_handler = None | ||||
|         self._task = None | ||||
| 
 | ||||
|     def _cancel_task(self): | ||||
|         self._cancelled = self._task.cancel() | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yury Selivanov
						Yury Selivanov