![](/img/trans.png)
[英]Python 3.6 AttributeError: module 'statsmodels' has no attribute 'compat'
[英]Python3.6 AttributeError: module 'asyncio' has no attribute 'run'
我試圖閱讀https://hackernoon.com/asynchronous-python-45df84b82434 。 這是關於異步 python 的,我嘗試了這個代碼,但我得到了一個奇怪的錯誤。 代碼是:`
import asyncio
import aiohttp
urls = ['http://www.google.com', 'http://www.yandex.ru', 'http://www.python.org']
async def call_url(url):
print('Starting {}'.format(url))
response = await aiohttp.ClientSession().get(url)
data = await response.text()
print('{}: {} bytes: {}'.format(url, len(data), data))
return data
futures = [call_url(url) for url in urls]
asyncio.run(asyncio.wait(futures))
當我嘗試運行時,它說:
Traceback (most recent call last):
File "test.py", line 15, in <module>
asyncio.run(asyncio.wait(futures))
AttributeError: module 'asyncio' has no attribute 'run'
sys:1: RuntimeWarning: coroutine 'call_url' was never awaited
我沒有任何名為 ayncio 的文件,我有證據:
>>> asyncio
<module 'asyncio' from '/usr/lib/python3.6/asyncio/__init__.py'>
asyncio.run
是 Python 3.7 的補充。 在 3.5-3.6 中,您的示例大致相當於:
import asyncio
futures = [...]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(futures))
asyncio.run()
函數是在 Python 3.7 中添加的。 來自asyncio.run()
函數文檔:
3.7 版新功能:重要提示:此函數已臨時添加到 Python 3.7 中的 asyncio。
注意臨時部分; Python 維護者預見到該函數可能需要進一步調整和更新,因此 API 可能會在未來的 Python 版本中發生變化。
無論如何,你不能在 Python 3.6 上使用它。 您必須升級或實施自己的。
一個非常簡單的近似是使用loop.run_until_complete()
:
loop = asyncio.get_event_loop()
result = loop.run_until_complete(coro)
盡管這忽略了處理可能仍在運行的剩余任務。 有關完整的asyncio.run()
實現,請參閱asyncio.runners
源代碼。
以防萬一這對其他人有用,但對我來說問題是我的文件被稱為asyncio.py
。 我將它重命名為asyncio_example.py
並且它再次開始工作(它在 asyncio 的導入語句中失敗)。
這個問題幫助我意識到這一點: https : //github.com/tornadoweb/tornado/issues/2868
如果有人遇到沒有電流循環的問題,請嘗試
循環=異步。 新的_event_loop()
結果 = loop.run_until_complete(coro)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.