mirror of
				https://github.com/python/cpython.git
				synced 2025-11-01 06:01:29 +00:00 
			
		
		
		
	asyncio: sync with Tulip
* _WaitHandleFuture.cancel() now notify IocpProactor through the overlapped
  object that the wait was cancelled.
* Optimize IocpProactor.wait_for_handle() gets the result if the wait is
  signaled immediatly.
* Enhance representation of Future and Future subclasses
  - Add "created at filename:lineno" in the representation
  - Add Future._repr_info() method which can be more easily overriden than
    Future.__repr__(). It should now be more easy to enhance Future
    representation without having to modify each subclass. For example,
    _OverlappedFuture and _WaitHandleFuture get the new "created at" information.
  - Use reprlib to format Future result, and function arguments when formatting a
    callback, to limit the length of the representation.
* Fix repr(_WaitHandleFuture)
* _WaitHandleFuture and _OverlappedFuture: hide frames of internal calls in the
  source traceback.
* Cleanup ProactorIocp._poll(): set the timeout to 0 after the first call to
  GetQueuedCompletionStatus()
* test_locks: close the temporary event loop and check the condition lock
* Remove workaround in test_futures, no more needed
			
			
This commit is contained in:
		
							parent
							
								
									7eca7343a0
								
							
						
					
					
						commit
						313a980904
					
				
					 7 changed files with 108 additions and 72 deletions
				
			
		|  | @ -92,30 +92,19 @@ def __del__(self): | |||
|                 self._loop.call_exception_handler(context) | ||||
|             futures.Future.__del__(self) | ||||
| 
 | ||||
|     def __repr__(self): | ||||
|         info = [] | ||||
|     def _repr_info(self): | ||||
|         info = super()._repr_info() | ||||
| 
 | ||||
|         if self._must_cancel: | ||||
|             info.append('cancelling') | ||||
|         else: | ||||
|             info.append(self._state.lower()) | ||||
|             # replace status | ||||
|             info[0] = 'cancelling' | ||||
| 
 | ||||
|         coro = coroutines._format_coroutine(self._coro) | ||||
|         info.append('coro=<%s>' % coro) | ||||
| 
 | ||||
|         if self._source_traceback: | ||||
|             frame = self._source_traceback[-1] | ||||
|             info.append('created at %s:%s' % (frame[0], frame[1])) | ||||
| 
 | ||||
|         if self._state == futures._FINISHED: | ||||
|             info.append(self._format_result()) | ||||
| 
 | ||||
|         if self._callbacks: | ||||
|             info.append(self._format_callbacks()) | ||||
|         info.insert(1, 'coro=<%s>' % coro) | ||||
| 
 | ||||
|         if self._fut_waiter is not None: | ||||
|             info.append('wait_for=%r' % self._fut_waiter) | ||||
| 
 | ||||
|         return '<%s %s>' % (self.__class__.__name__, ' '.join(info)) | ||||
|             info.insert(2, 'wait_for=%r' % self._fut_waiter) | ||||
|         return info | ||||
| 
 | ||||
|     def get_stack(self, *, limit=None): | ||||
|         """Return the list of stack frames for this task's coroutine. | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner