You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
"""
 | 
						|
Inputhook for running the original asyncio event loop while we're waiting for
 | 
						|
input.
 | 
						|
 | 
						|
By default, in IPython, we run the prompt with a different asyncio event loop,
 | 
						|
because otherwise we risk that people are freezing the prompt by scheduling bad
 | 
						|
coroutines. E.g., a coroutine that does a while/true and never yield back
 | 
						|
control to the loop. We can't cancel that.
 | 
						|
 | 
						|
However, sometimes we want the asyncio loop to keep running while waiting for
 | 
						|
a prompt.
 | 
						|
 | 
						|
The following example will print the numbers from 1 to 10 above the prompt,
 | 
						|
while we are waiting for input. (This works also because we use
 | 
						|
prompt_toolkit`s `patch_stdout`)::
 | 
						|
 | 
						|
    In [1]: import asyncio
 | 
						|
 | 
						|
    In [2]: %gui asyncio
 | 
						|
 | 
						|
    In [3]: async def f():
 | 
						|
       ...:     for i in range(10):
 | 
						|
       ...:         await asyncio.sleep(1)
 | 
						|
       ...:         print(i)
 | 
						|
 | 
						|
 | 
						|
    In [4]: asyncio.ensure_future(f())
 | 
						|
 | 
						|
"""
 | 
						|
 | 
						|
 | 
						|
def inputhook(context):
 | 
						|
    """
 | 
						|
    Inputhook for asyncio event loop integration.
 | 
						|
    """
 | 
						|
    # For prompt_toolkit 3.0, this input hook literally doesn't do anything.
 | 
						|
    # The event loop integration here is implemented in `interactiveshell.py`
 | 
						|
    # by running the prompt itself in the current asyncio loop. The main reason
 | 
						|
    # for this is that nesting asyncio event loops is unreliable.
 | 
						|
    return
 |