Tim*_*Tim 12 python asynchronous python-3.x
以下来自Nutshell中Python的示例设置 x为 23 延迟一秒半之后:
@asyncio.coroutine
def delayed_result(delay, result):
yield from asyncio.sleep(delay)
return result
loop = asyncio.get_event_loop()
x = loop.run_until_complete(delayed_result(1.5, 23))
Run Code Online (Sandbox Code Playgroud)
我觉得很难理解是什么yield from asyncio.sleep(delay) .
来自https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep
Run Code Online (Sandbox Code Playgroud)Coroutine asyncio.sleep(delay, result=None, *, loop=None)创建一个在给定时间(以秒为单位)后完成的协程.如果提供了结果,则在协程完成时将其生成给调用者.
所以asyncio.sleep(delay)返回一个协程对象.
协程对象"完成"是什么意思?
什么值为yield from asyncio.sleep(delay)主程序提供了什么?
谢谢.
use*_*074 17
以下代码行:
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)
...冻结代码执行5秒钟.在睡眠功能完成5秒钟之后,没有进一步计算或执行任何操作,因为如果没有睡眠功能将控制权返回给呼叫者,则应用程序无法继续.这称为同步编程,当没有机制让应用程序更改其焦点并在等待期间完成其他任务时,例如等待调用数据库,web api或在本例中为睡眠函数的结果.在同步编程中,不需要事件循环,因为不期望应用程序管理其时间,也不会切换任务以提高效率.
以下代码:
asyncio.sleep(5)
Run Code Online (Sandbox Code Playgroud)
...是asyncio库的一部分,专为异步编程而设计,其中为事件循环分配要竞争的任务,并且它(事件循环)监视其所有任务的状态并从一个任务切换到另一个,目的是最小化空闲/等待的时间量.这不是同时执行多个进程的线程,这只是优化任务执行,因此CPU不会空闲,因此大大减少了总体执行时间.
关键字的结果(可以使用python 3.5以后的await关键字)是事件循环有机会完成一个任务的时刻(例如,从数据库调用返回查询时)并关注事件的另一个任务循环意识到并且实际上可以在此期间计算/执行.
@ asyncio.coroutine装饰+从产量与Python 3.5起兼容,但使用new关键字异步高清定义一个asyncronous协同程序及其内部的await关键字,让事件循环来评估切换到另一项任务是共同的,面向未来的方式如果你是3.5或以上,去.
Asyncronous python可能很难让你头脑发热但是前几年有很多关于这个主题的优秀pycon会谈 - 在Youtube上寻找一个并且如果课程阅读文档
| 归档时间: |
|
| 查看次数: |
10016 次 |
| 最近记录: |