Python 3.5+ 协程 ( coroutines ) 之协程函数 ( async def )

yufei       5 年, 10 月 前       907

Python 3.5+ 以上版本提供了 async 关键字将一个普通函数定义为 协程函数

协程函数的语法格式如下

async_funcdef ::=  [decorators] "async" "def" funcname "(" [parameter_list] ")"
                   ["->" expression] ":" suite

比如下面代码中的函数 hello 就是一个协程函数

async def hello(param1, param2):
    do_stuff()
    await some_coroutine()

协程函数 是一个普通函数,而特殊之处是可以在多个点暂停执行和恢复执行

上面的范例中,如果运行协程函数 hello() ,会在遇到 await 后暂停执行,转而等待 some_coroutine() 运行完成,当 some_coroutine() 返回后,hello() 才会接着继续运行

在协程函数主体中,任何的 awaitasync 标志符都会成为保留关键字,其实,函数参数中的 awaitasync 标识符也会成为关键字

这就导致了 Python RQ 队列不能在 Python 3.5+ 下运行的原因

需要注意的是,协程函数 中可以 await 表达式 、async for 表达式和 async with 表达式,但这些表达式也仅仅能在协同函数中使用

另一个需要注意的是,任何 async def 关键字定义的函数都是协程函数,而不管函数主体中是否包含 awaitasync 关键字

最后一个注意事项,就是 协程函数 中不能使用 yield from 关键字,否则会报语法错误 ( SyntaxError )

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.