mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 18:28:49 +00:00 
			
		
		
		
	asyncio doc: write simpler examples to introduce asyncio
This commit is contained in:
		
							parent
							
								
									9c422f3c3d
								
							
						
					
					
						commit
						7f314ed71b
					
				
					 2 changed files with 94 additions and 25 deletions
				
			
		|  | @ -649,24 +649,27 @@ Event loop examples | |||
| 
 | ||||
| .. _asyncio-hello-world-callback: | ||||
| 
 | ||||
| Hello World with a callback | ||||
| --------------------------- | ||||
| Hello World with call_soon() | ||||
| ---------------------------- | ||||
| 
 | ||||
| Print ``"Hello World"`` every two seconds using a callback scheduled by the | ||||
| :meth:`BaseEventLoop.call_soon` method:: | ||||
| Example using the :meth:`BaseEventLoop.call_soon` method to schedule a | ||||
| callback. The callback displays ``"Hello World"`` and then stops the event | ||||
| loop:: | ||||
| 
 | ||||
|     import asyncio | ||||
| 
 | ||||
|     def print_and_repeat(loop): | ||||
|     def hello_world(loop): | ||||
|         print('Hello World') | ||||
|         loop.call_later(2, print_and_repeat, loop) | ||||
|         loop.stop() | ||||
| 
 | ||||
|     loop = asyncio.get_event_loop() | ||||
|     loop.call_soon(print_and_repeat, loop) | ||||
|     try: | ||||
|         loop.run_forever() | ||||
|     finally: | ||||
|         loop.close() | ||||
| 
 | ||||
|     # Schedule a call to hello_world() | ||||
|     loop.call_soon(hello_world, loop) | ||||
| 
 | ||||
|     # Blocking call interrupted by loop.stop() | ||||
|     loop.run_forever() | ||||
|     loop.close() | ||||
| 
 | ||||
| .. seealso:: | ||||
| 
 | ||||
|  | @ -674,6 +677,42 @@ Print ``"Hello World"`` every two seconds using a callback scheduled by the | |||
|    uses a :ref:`coroutine <coroutine>`. | ||||
| 
 | ||||
| 
 | ||||
| .. _asyncio-date-callback: | ||||
| 
 | ||||
| Display the current date with call_later() | ||||
| ------------------------------------------ | ||||
| 
 | ||||
| Example of callback displaying the current date every second. The callback uses | ||||
| the :meth:`BaseEventLoop.call_later` method to reschedule itself during 5 | ||||
| seconds, and then stops the event loop:: | ||||
| 
 | ||||
|     import asyncio | ||||
|     import datetime | ||||
| 
 | ||||
|     def display_date(end_time, loop): | ||||
|         print(datetime.datetime.now()) | ||||
|         if (loop.time() + 1.0) < end_time: | ||||
|             loop.call_later(1, display_date, end_time, loop) | ||||
|         else: | ||||
|             loop.stop() | ||||
| 
 | ||||
|     loop = asyncio.get_event_loop() | ||||
| 
 | ||||
|     # Schedule the first call to display_date() | ||||
|     end_time = loop.time() + 5.0 | ||||
|     loop.call_soon(display_date, end_time, loop) | ||||
| 
 | ||||
|     # Blocking call interrupted by loop.stop() | ||||
|     loop.run_forever() | ||||
|     loop.close() | ||||
| 
 | ||||
| .. seealso:: | ||||
| 
 | ||||
|    The :ref:`coroutine displaying the current date | ||||
|    <asyncio-date-coroutine>` example uses a :ref:`coroutine | ||||
|    <coroutine>`. | ||||
| 
 | ||||
| 
 | ||||
| .. _asyncio-watch-read-event: | ||||
| 
 | ||||
| Watch a file descriptor for read events | ||||
|  |  | |||
|  | @ -77,30 +77,60 @@ Coroutines (and tasks) can only run when the event loop is running. | |||
| 
 | ||||
| .. _asyncio-hello-world-coroutine: | ||||
| 
 | ||||
| Example: "Hello World" coroutine | ||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||
| Example: Hello World coroutine | ||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||
| 
 | ||||
| Print ``"Hello World"`` every two seconds using a coroutine:: | ||||
| Example of coroutine displaying ``"Hello World"``:: | ||||
| 
 | ||||
|     import asyncio | ||||
| 
 | ||||
|     @asyncio.coroutine | ||||
|     def greet_every_two_seconds(): | ||||
|         while True: | ||||
|             print('Hello World') | ||||
|             yield from asyncio.sleep(2) | ||||
|     def hello_world(): | ||||
|         print("Hello World!") | ||||
| 
 | ||||
|     loop = asyncio.get_event_loop() | ||||
|     try: | ||||
|         loop.run_until_complete(greet_every_two_seconds()) | ||||
|     finally: | ||||
|         loop.close() | ||||
|     # Blocking call which returns when the hello_world() coroutine is done | ||||
|     loop.run_until_complete(hello_world()) | ||||
|     loop.close() | ||||
| 
 | ||||
| .. seealso:: | ||||
| 
 | ||||
|    The :ref:`Hello World with a callback <asyncio-hello-world-callback>` | ||||
|    example uses a callback scheduled by the :meth:`BaseEventLoop.call_soon` | ||||
|    method. | ||||
|    The :ref:`Hello World with call_soon() <asyncio-hello-world-callback>` | ||||
|    example uses the :meth:`BaseEventLoop.call_soon` method to schedule a | ||||
|    callback. | ||||
| 
 | ||||
| 
 | ||||
| .. _asyncio-date-coroutine: | ||||
| 
 | ||||
| Example: Coroutine displaying the current date | ||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||
| 
 | ||||
| Example of coroutine displaying the current date every second during 5 seconds | ||||
| using the :meth:`sleep` function:: | ||||
| 
 | ||||
|     import asyncio | ||||
|     import datetime | ||||
| 
 | ||||
|     @asyncio.coroutine | ||||
|     def display_date(loop): | ||||
|         end_time = loop.time() + 5.0 | ||||
|         while True: | ||||
|             print(datetime.datetime.now()) | ||||
|             if (loop.time() + 1.0) >= end_time: | ||||
|                 break | ||||
|             yield from asyncio.sleep(1) | ||||
| 
 | ||||
|     loop = asyncio.get_event_loop() | ||||
|     # Blocking call which returns when the display_date() coroutine is done | ||||
|     loop.run_until_complete(display_date(loop)) | ||||
|     loop.close() | ||||
| 
 | ||||
| .. seealso:: | ||||
| 
 | ||||
|    The :ref:`display the current date with call_later() | ||||
|    <asyncio-date-callback>` example uses a callback with the | ||||
|    :meth:`BaseEventLoop.call_later` method. | ||||
| 
 | ||||
| 
 | ||||
| Example: Chain coroutines | ||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner