什么是Python中的异步?

问题描述:

我读过关于新的Python“关键字”asyncawait。然而,它们既不是真正的关键字,也不是保留在命名空间中什么是Python中的异步?

>>> import keyword 
>>> keyword.iskeyword("async") 
False 
>>> async 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'async' is not defined 

在这个例子中我希望为关键字TrueSyntaxError

那么,究竟是Python中的async?怎么运行的?

+0

'async'只适用于Python 3.5。这是你使用的版本吗? –

+5

'async'和'await'并不是真正的关键字,但它们将在Python 3.7中。 – vaultah

+0

我使用Python 3.6.0 –

为了向下兼容,asyncawait通过ugly tokenizer hack进行分析。内部的async def函数定义,或用于直接async一个def之前,标记生成器取代NAME令牌asyncawaitASYNCAWAIT令牌;在其他上下文中,分词器发出和await的常规NAME令牌,将它们视为标识符。

你可以看到,处理它在Parser/tokenizer.c的代码,你可以找到在PEP 492向后兼容性计划,介绍了asyncawait语法PEP。