我有一个python程序,它使用asyncio
和await
模块。这是我从
here。
import asyncio
import os
import urllib.request
import await
@asyncio.coroutine
def download_coroutine(url):
"""
A coroutine to download the specified url
"""
request = urllib.request.urlopen(url)
filename = os.path.basename(url)
with open(filename, 'wb') as file_handle:
while True:
chunk = request.read(1024)
if not chunk:
break
file_handle.write(chunk)
msg = 'Finished downloading {filename}'.format(filename=filename)
return msg
@asyncio.coroutine
def main(urls):
"""
Creates a group of coroutines and waits for them to finish
"""
coroutines = [download_coroutine(url) for url in urls]
completed, pending = await asyncio.wait(coroutines)
for item in completed:
print(item.result())
if __name__ == '__main__':
urls = ["http://www.irs.gov/pub/irs-pdf/f1040.pdf",
"http://www.irs.gov/pub/irs-pdf/f1040a.pdf",
"http://www.irs.gov/pub/irs-pdf/f1040ez.pdf",
"http://www.irs.gov/pub/irs-pdf/f1040es.pdf",
"http://www.irs.gov/pub/irs-pdf/f1040sb.pdf"]
event_loop = asyncio.get_event_loop()
try:
event_loop.run_until_complete(main(urls))
finally:
event_loop.close()
我正在使用python 3.5.1
。
C:\Anaconda3\python.exe "C:\Users\XXXXXXS\AppData\Roaming\JetBrains\PyCharm Community Edition 2016.1\helpers\pydev\pydevconsole.py" 49950 49951
Python 3.5.1 |Anaconda 2.4.0 (64-bit)| (default, Jun 15 2016, 15:29:36) [MSC v.1900 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.
当我试图运行它时,我得到了以下错误。
File "C:/Cubic/playpen/python/concepts/advanced/coroutines.py", line 29
completed, pending = await asyncio.wait(coroutines)
^
SyntaxError: invalid syntax
我已经安装了asyncio和await。
我也试过同样的方法,也没有发现语法错误。
C:\playpen\python>python
Python 3.5.1 |Anaconda 2.4.0 (64-bit)| (default, Jun 15 2016, 15:29:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> async def foo():
... await bar
...
你有两个不同的问题。
正如dirn在他的注释中提到的,您不应该导入
await
。await
是Python 3.5中的内置关键字。所以,删除import await
。您混合了
@asyncio.coroutine
decorator和await
关键字(正如2Cubed所提到的)。使用async def
而不是decorator,如链接到的example中所示。换句话说,而不是:使用:
对
main
执行同样的操作。如果您做了这些更改,您的代码应该在Python3.5下运行。
你的文章说:
这意味着这些KW在Python3.4中无效。
我现在安装了python 3.5并尝试了
python
解释器没有语法错误。
当在使用
async
关键字定义的函数内部以外的任何地方使用时,await
将引发一个SyntaxError
,而不管它是否已使用@asyncio.coroutine
装饰器进行协程。相关问题 更多 >
编程相关推荐