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()
才会接着继续运行
在协程函数主体中,任何的 await
和 async
标志符都会成为保留关键字,其实,函数参数中的 await
和 async
标识符也会成为关键字
这就导致了 Python RQ 队列不能在 Python 3.5+ 下运行的原因
需要注意的是,协程函数 中可以 await
表达式 、async for
表达式和 async with
表达式,但这些表达式也仅仅能在协同函数中使用
另一个需要注意的是,任何 async def
关键字定义的函数都是协程函数,而不管函数主体中是否包含 await
或 async
关键字
最后一个注意事项,就是 协程函数 中不能使用 yield from
关键字,否则会报语法错误 ( SyntaxError
)
目前尚无回复