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 )
            目前尚无回复