协同程序的Asyncio打印状态进展

时间:2015-07-10 14:06:11

标签: python python-3.x asynchronous coroutine

我有一堆协同作用

@asyncio.coroutine
def do_work():
    global COUNTER
    result = ...
    if result.status == 'OK':
        COUNTER += 1

和另一个

COUNTER = 0
@asyncio.coroutine
def display_status():
    while True:
        print(COUNTER)
        yield from asyncio.sleep(1)

必须显示已完成工作的协同程序的数量。如何正确实施这项任务?以下解决方案不起作用

@asyncio.coroutine
def spawn_jobs():
    coros = []
    for i in range(10):
        coros.append(asyncio.Task(do_work()))
    yield from asyncio.gather(*coros)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.create_task(display_status())
    loop.run_until_complete(spawn_jobs())
    loop.close()

我希望无论do_work()协同程序做什么,计数器都会每秒打印到控制台。但我只有两个输出:0和几秒后重复10。

0 个答案:

没有答案