Asyncio 停止等待套接字

问题描述 投票:0回答:1

我正在尝试用 micropython 为 ESP32 编写代码。

ESP32 需要每 10 秒在 LCD 显示屏上写入一次,并且在一台 Web 服务器中响应。但是当转到Web服务器代码部分时,它会停止,直到Web客户端咨询(套接字)。我正在尝试使用异步。我写了一段代码来模拟我的情况,但我没有工作。我不知道为什么。你能帮助我吗?对不起我的英语。问候。

import asyncio
async def eternity():
    # Sleep until enter press
    x=input("Press enter..")

async def main():
    while True:
        # Wait for at most 1 second
        try:
            await asyncio.wait_for(eternity(), timeout=1.0)
        except asyncio.TimeoutError:
            print('timeout!')
        #await asyncio.sleep(2)

asyncio.run(main())

我等待类似的输出:

超时!

超时!

超时!

超时!

按回车键

最终,如果我按 Enter 键

代码改编自: https://docs.python.org/es/3/library/asyncio-task.html#coroutines

websocket python-asyncio esp32 micropython
1个回答
0
投票
async def eternity():
    # Sleep until enter press
    x=input("Press enter..")

上面的函数等待按键,并且在等待时阻塞。它不是异步代码。是的,有一个

async def
,但这并不意味着它可以执行异步 I/O。并且同步 I/O 不能超时并被异步中断。

请确保您了解 asyncio 的功能。它可以同时运行多个任务,但不能并行。一次只能执行一个任务,并且唯一可以发生任务切换的位置是

await
。如果活动任务无法立即继续,asyncio 将运行另一个任务。

© www.soinside.com 2019 - 2024. All rights reserved.