我不知道该怎么用安乔.你能帮我解决这个问题吗?假设我有一个IO任务,它需要8秒,我把它放在协程任务()中.我想运行一个无限循环,每5秒执行一次,而不阻塞我的代码.

import asyncio


async def task():
    print('starting task')
    await asyncio.sleep(8)
    print('finished task')

async def main():
    count = 0
    while True:
        print(count)
        if count % 5 == 0:
            print('running task')
            await task()
        count += 1
        await asyncio.sleep(1)

asyncio.run(main())

根据我对文档的理解,当我在task协同程序中执行await时,它应该返回到执行main,但这并没有发生.我做错什么了?我的输出是

0
running task
starting task
finished task
1
2
3
4
5
running task
starting task
finished task
6
7
8
9
10

推荐答案

你的问题是你在等待协程,它做的事情就像盒子上说的那样:它停止任何事情直到它完成(说它不返回到main也不太正确. "只是晚于你想要的). 将其旋转到另一个未被期待的任务将让它"运行在后台"

import asyncio

async def task():
    print('starting task')
    await asyncio.sleep(8)
    print('finished task')

async def main():
    count = 0
    while True:
        print(count)
        if count % 5 == 0:
            print('running task')
            asyncio.create_task(task())
        count += 1
        await asyncio.sleep(1)

asyncio.run(main())

给了我,我想这是你想要的

0
running task
starting task
1
2
3
4
5
running task
starting task
6
7
finished task
8
9
10
running task
starting task
11
12
finished task
13
14

Python相关问答推荐

@Property方法上的inspect.getmembers出现意外行为,引发异常

使用新的类型语法正确注释ParamSecdecorator (3.12)

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

将jit与numpy linSpace函数一起使用时出错

如何使用它?

NumPy中条件嵌套for循环的向量化

当递归函数的返回值未绑定到变量时,非局部变量不更新:

在Django admin中自动完成相关字段筛选

什么是最好的方法来切割一个相框到一个面具的第一个实例?

字符串合并语法在哪里记录

Tkinter菜单自发添加额外项目

从Windows Python脚本在WSL上运行Linux应用程序

如何按row_id/row_number过滤数据帧

从源代码显示不同的输出(机器学习)(Python)

Django Table—如果项目是唯一的,则单行

一个telegram 机器人应该发送一个测验如何做?""

如何将相同组的值添加到嵌套的Pandas Maprame的倒数第二个索引级别

如何在Django模板中显示串行化器错误

关于数字S种子序列内部工作原理的困惑

GEKKO中若干参数的线性插值动态优化