Skip to content

Commit 6cb8063

Browse files
committed
finish 4.3
1 parent 1c57e96 commit 6cb8063

File tree

2 files changed

+43
-41
lines changed

2 files changed

+43
-41
lines changed

chapter4/03_Event_loop_management_with_Asyncio.rst

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Asyncio提供了一下方法来管理事件循环:
3939
|how|
4040
-----
4141

42-
下面的代码中,我们将展示如何使用Asyncio库提供的时间循环创建异步模式的应用。::
42+
下面的代码中,我们将展示如何使用Asyncio库提供的时间循环创建异步模式的应用。 ::
4343

4444
import asyncio
4545
import datetime
@@ -64,7 +64,7 @@ Asyncio提供了一下方法来管理事件循环:
6464
if (loop.time() + 1.0) < end_time:
6565
loop.call_later(1, function_1, end_time, loop)
6666
else:
67-
loop.stop()
67+
loop.stop()
6868

6969
def function_4(end_time, loop):
7070
print ("function_5 called")
@@ -100,3 +100,44 @@ Asyncio提供了一下方法来管理事件循环:
100100
在这个例子中,我们定义了三个异步的任务,相继执行,入下图所示的顺序。
101101

102102
.. image:: ../images/task-execution.png
103+
104+
首先,我们要得到这个事件循环:::
105+
106+
loop = asyncio.get_event_loop()
107+
108+
然后我们通过 ``call_soon`` 方法调用了 ``function_1()`` 函数。 ::
109+
110+
end_loop = loop.time() + 9.0
111+
loop.call_soon(function_1, end_loop, loop)
112+
113+
让我们来看一下 ``function_1()`` 的定义:::
114+
115+
def function_1(end_time, loop):
116+
print ("function_1 called")
117+
if (loop.time() + 1.0) < end_time:
118+
loop.call_later(1, function_2, end_time, loop)
119+
else:
120+
loop.stop()
121+
122+
这个函数通过以下参数定义了应用的异步行为:
123+
124+
- ``end_time``: 定义了 ``function_1()`` 可以运行的最长时间,并通过 ``call_later`` 方法传入到 ``function_2()`` 中作为参数
125+
- ``loop``: 之前通过 ``get_event_loop()`` 方法得到的事件循环
126+
127+
``function_1()`` 的任务非常简单,只是打印出函数名字。当然,里面也可以写非常复杂的操作。 ::
128+
129+
print ("function_1 called")
130+
131+
任务执行结束之后,它将会比较 ``loop.time()`` +1s和设定的运行时间,如果没有超过,使用 ``call_later`` 在1秒之后执行 ``function_2()`` 。 ::
132+
133+
if (loop.time() + 1.0) < end_time:
134+
loop.call_later(1, function_2, end_time, loop)
135+
else:
136+
loop.stop()
137+
138+
``function_2()`` 和 ``function_3()`` 的作用类似。
139+
140+
如果运行的时间超过了设定,时间循环终止。 ::
141+
142+
loop.run_forever()
143+
loop.close()

chapter4/event.py

Lines changed: 0 additions & 39 deletions
This file was deleted.

0 commit comments

Comments
 (0)