首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步等待在协程中无法识别

异步等待在协程中无法识别
EN

Stack Overflow用户
提问于 2018-01-10 05:39:21
回答 3查看 1.5K关注 0票数 2

我正在使用一个简单的Python脚本来理解asyncio模块。我正在浏览可以在here上找到的文档

然而,我注意到我安装的Python3(版本3.5.3,安装在覆盆子pi上)不能识别async def,但能识别@asyncio.coroutine。因此,我的脚本已从教程代码更改为:

代码语言:javascript
复制
import asyncio
import datetime

@asyncio.coroutine
def display_date(loop):
    end_time = loop.time() + 5.0
    while True:
        print(datetime.datetime.now())
        if (loop.time() + 1.0) >= end_time:
            break
        await asyncio.sleep(1)

loop = asyncio.get_event_loop()
# Blocking call which returns when the display_date() coroutine is done
loop.run_until_complete(display_date(loop))
loop.close()

然而,我在await asyncio.sleep(1)遇到了语法错误。这有什么原因吗?它在我的ubuntu机器(装有python 3.5.1)上运行得很好。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-10 21:51:16

我在这个好战的小东西上重新闪现了一次Raspbian。它现在似乎起作用了。奇怪的是,图片是2019-11-29版本。真奇怪。

票数 0
EN

Stack Overflow用户

发布于 2018-01-10 20:21:03

仅允许在async def函数内使用await

@asyncio.coroutine装饰器标记的旧式协程应该使用yield from语法。

您使用的是Python 3.5.1,因此只需使用新的语法,例如:

导入asyncio导入日期时间

代码语言:javascript
复制
async def display_date(loop):
    end_time = loop.time() + 5.0
    while True:
        print(datetime.datetime.now())
        if (loop.time() + 1.0) >= end_time:
            break
        await asyncio.sleep(1)

loop = asyncio.get_event_loop()
# Blocking call which returns when the display_date() coroutine is done
loop.run_until_complete(display_date(loop))
loop.close()
票数 2
EN

Stack Overflow用户

发布于 2018-01-10 13:25:31

async defawait -是从Python3.5开始才能使用的新语法。如果Python不能识别async def,那么它也不能识别await

我很难相信一些3.5.3版本由于某种原因没有实现这种语法。更有可能的是,您使用的是较旧的python版本。检查它,添加到代码中,例如:

代码语言:javascript
复制
import sys
print(sys.version)

它将显示您正在运行的Python版本。

顺便说一句,asyncio是标准库模块,你根本不应该用pip安装它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48177039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档