0

我正在尝试使用进度指示器,其中一项任务正在执行某项任务,而另一项则表示进度。我的 hello world 版本在其中一项任务中进入睡眠状态,但从未醒来。

我错过了什么?

非常感谢

import asyncio
import sys
import time
import itertools


progress = True


def get_progress():
    return progress


async def define_progress():
    print("progress started")
    await asyncio.sleep(2)
    progress = False
    print("progress ended")


async def run_spinner(msg):
    spinner = itertools.cycle(['-', '/', '|', '\\'])
    sys.stdout.write("{0} ".format(msg))
    while(get_progress()):
        sys.stdout.write("{0}".format(next(spinner)))
        sys.stdout.flush()
        time.sleep(0.3)
        sys.stdout.write('\b')


async def main():
    msg = "start logic"
    await asyncio.gather(run_spinner(msg), define_progress())


loop = asyncio.get_event_loop()
try:
    loop.run_until_complete(main())
finally:
    loop.close()

输出如下所示,而第二行无限运行微调器。

进度开始
创建包\

4

1 回答 1

1

我必须取得一个全局变量并将 await asyncio.sleep(1) 添加到 run_spinner。我不确定这是否能回答您的问题,但它似乎确实可以满足您的要求。

import asyncio
import sys
import time
import itertools

global progress

progress = True



def get_progress():
    global progress
    return progress

async def define_progress():
    global progress
    print("progress started")
    await asyncio.sleep(2)
    progress = False
    print("progress ended")


async def run_spinner(msg):
    spinner = itertools.cycle(['-', '/', '|', '\\'])
    sys.stdout.write("{0} ".format(msg))
    while(get_progress()):
        sys.stdout.write("{0}".format(next(spinner)))
        sys.stdout.flush()
        time.sleep(0.2)
        sys.stdout.write('\b')
        await asyncio.sleep(1)


async def main():
    msg = "start logic"
    await asyncio.gather(run_spinner(msg), define_progress())


loop = asyncio.get_event_loop()
try:
    loop.run_until_complete(main())
finally:
    loop.close()
于 2019-03-04T20:53:21.520 回答