Python3.5-Name';等待&x27;没有定义
我正在尝试在Python3.5中使用新的Python3.5-Name';等待&x27;没有定义,python,async-await,coroutine,python-3.5,Python,Async Await,Coroutine,Python 3.5,我正在尝试在Python3.5中使用新的await语法进行协作 我有这样一个简单的例子: #/usr/bin/env python 导入异步 @异步协同程序 def加法器(*参数,延迟): 尽管如此: 异步睡眠产生的收益(延迟) 打印(总和(args)) def main(): 异步任务(加法器(1,2,3,延迟=5)) 异步任务(加法器(10,20,延迟=3)) loop=asyncio.get\u event\u loop() loop.run_forever() 如果名称=“\uuuuu
await
语法进行协作
我有这样一个简单的例子:
#/usr/bin/env python
导入异步
@异步协同程序
def加法器(*参数,延迟):
尽管如此:
异步睡眠产生的收益(延迟)
打印(总和(args))
def main():
异步任务(加法器(1,2,3,延迟=5))
异步任务(加法器(10,20,延迟=3))
loop=asyncio.get\u event\u loop()
loop.run_forever()
如果名称=“\uuuuu main\uuuuuuuu”:
main()
我将产量从
行更改为使用wait
关键字:
等待异步睡眠(延迟)
我得到了SyntaxError
:
File "./test.py", line 8
await asyncio.sleep(delay)
^
SyntaxError: invalid syntax
所以我尝试等待(asyncio.sleep(delay))
看看会发生什么:
Task exception was never retrieved
future: <Task finished coro=<adder() done, defined at c:\python35\Lib\asyncio\coroutines.py:198> exception=NameError("name 'await' is not defined",)>
Traceback (most recent call last):
File "c:\python35\Lib\asyncio\tasks.py", line 239, in _step
result = coro.send(value)
File "c:\python35\Lib\asyncio\coroutines.py", line 200, in coro
res = func(*args, **kw)
File "./test.py", line 8, in adder
await (asyncio.sleep(delay))
NameError: name 'await' is not defined
Task exception was never retrieved
future: <Task finished coro=<adder() done, defined at c:\python35\Lib\asyncio\coroutines.py:198> exception=NameError("name 'await' is not defined",)>
Traceback (most recent call last):
File "c:\python35\Lib\asyncio\tasks.py", line 239, in _step
result = coro.send(value)
File "c:\python35\Lib\asyncio\coroutines.py", line 200, in coro
res = func(*args, **kw)
File "./test.py", line 8, in adder
await (asyncio.sleep(delay))
NameError: name 'await' is not defined
编辑:
我假设将paren添加到
await
行是试图调用函数await()
——这就是为什么它不起作用,并给我一个NameError
。但是为什么在这两个示例中都不能识别关键字?您必须将函数声明为async
才能使用wait
。替换来自的产量是不够的
#! /usr/bin/env python
import asyncio
@asyncio.coroutine
async def adder(*args, delay):
while True:
await asyncio.sleep(delay)
print(sum(args))
def main():
asyncio.Task(adder(1, 2, 3, delay=5))
asyncio.Task(adder(10, 20, delay=3))
loop = asyncio.get_event_loop()
loop.run_forever()
if __name__ == "__main__":
main()
您需要将函数声明为
async
,以使其正常工作。只有在文件中包含使用async def
声明的a函数时,await
关键字才会启用–有关详细信息,请参阅。根据,只有在使用新的async def
语法定义的函数中才能识别await
关键字,这样就不需要导入