Merge 3.4 (asyncio doc)

This commit is contained in:
Victor Stinner 2014-10-15 18:49:32 +02:00
commit 4ed3c65e5e
2 changed files with 94 additions and 25 deletions

View File

@ -649,24 +649,27 @@ Event loop examples
.. _asyncio-hello-world-callback: .. _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 Example using the :meth:`BaseEventLoop.call_soon` method to schedule a
:meth:`BaseEventLoop.call_soon` method:: callback. The callback displays ``"Hello World"`` and then stops the event
loop::
import asyncio import asyncio
def print_and_repeat(loop): def hello_world(loop):
print('Hello World') print('Hello World')
loop.call_later(2, print_and_repeat, loop) loop.stop()
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
loop.call_soon(print_and_repeat, loop)
try: # Schedule a call to hello_world()
loop.run_forever() loop.call_soon(hello_world, loop)
finally:
loop.close() # Blocking call interrupted by loop.stop()
loop.run_forever()
loop.close()
.. seealso:: .. seealso::
@ -674,6 +677,42 @@ Print ``"Hello World"`` every two seconds using a callback scheduled by the
uses a :ref:`coroutine <coroutine>`. 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: .. _asyncio-watch-read-event:
Watch a file descriptor for read events Watch a file descriptor for read events

View File

@ -77,30 +77,60 @@ Coroutines (and tasks) can only run when the event loop is running.
.. _asyncio-hello-world-coroutine: .. _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 import asyncio
@asyncio.coroutine @asyncio.coroutine
def greet_every_two_seconds(): def hello_world():
while True: print("Hello World!")
print('Hello World')
yield from asyncio.sleep(2)
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
try: # Blocking call which returns when the hello_world() coroutine is done
loop.run_until_complete(greet_every_two_seconds()) loop.run_until_complete(hello_world())
finally: loop.close()
loop.close()
.. seealso:: .. seealso::
The :ref:`Hello World with a callback <asyncio-hello-world-callback>` The :ref:`Hello World with call_soon() <asyncio-hello-world-callback>`
example uses a callback scheduled by the :meth:`BaseEventLoop.call_soon` example uses the :meth:`BaseEventLoop.call_soon` method to schedule a
method. 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 Example: Chain coroutines
^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^