python-3.x - 在 python 3.4 中,每次循环完成后永远重复事件循环

标签 python-3.x python-asyncio

我使用的是Python 3.4。 我试图让多个任务的循环异步运行,当一个循环完成后,循环又从头开始。只有在最后一轮完成后才需要重新开始循环。我认为这段代码可能就是我正在寻找的代码,但它只运行一次。

import asyncio

@asyncio.coroutine
def some_task(name, number):
    print('task ', name, ' started')
    yield from asyncio.sleep(number)
    print('task ', name, ' finished')

@asyncio.coroutine
def loop_executer(loop, tasks):
    if not loop.is_running():
        loop.run_until_complete(asyncio.wait(tasks))

tasks = [
    asyncio.ensure_future(some_task("A", 2)),
    asyncio.ensure_future(some_task("B", 5)),
    asyncio.ensure_future(some_task("C", 4))]

ev_loop = asyncio.get_event_loop()
ev_loop.create_task(loop_executer(ev_loop, tasks))
ev_loop.run_forever()

最佳答案

没有重复任务的机制 - 将其包装在 while 循环中。

import asyncio

@asyncio.coroutine
def some_task(name, number):
    print('task ', name, ' started')
    yield from asyncio.sleep(number)
    print('task ', name, ' finished')

@asyncio.coroutine
def loop_executer(loop):
    # you could use even while True here
    while loop.is_running():
        tasks = [
            some_task("A", 2),
            some_task("B", 5),
            some_task("C", 4)
        ]
        yield from asyncio.wait(tasks)

ev_loop = asyncio.get_event_loop()
ev_loop.create_task(loop_executer(ev_loop))
ev_loop.run_forever()

您不必在协程上使用 ensure_future

关于python-3.x - 在 python 3.4 中,每次循环完成后永远重复事件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35884390/

相关文章:

python - 在 Python 3.5 中使用 aiohttp 获取多个 url

python - sanic:如何异步转换 markdown 内容

python - 如何调用类中包含的异步函数?

python - 带有 f 字符串的花括号 - ValueError : Sign not allowed in string format specifier

python-3.x - 当 call tabula 遇到 Error : Cannot create file C:\Users

python - 在 Flask 中的 HTML 页面上打印 python 控制台输出

python - 如何保持与异步 websockets 客户端的连接?

python - 为什么全局关键字需要访问在外部范围内定义的变量?

python-3.x - 了解 Dask 的任务流

python - 如何在越来越多的任务上使用 asyncio.wait?