Python 3.x 在Python3.4中,每次循环完成后永远重复eventloop

Python 3.x 在Python3.4中,每次循环完成后永远重复eventloop,python-3.x,python-asyncio,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) prin

我正在使用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()

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

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()

你不必在协同程序中使用
确保未来

为什么
循环执行器
调用
运行直到完成
,同时你也调用
永远运行
?@AndrewCheong,因为我需要在新循环再次开始之前完成三个任务。你到底为什么关心“新循环”?事件循环的要点是永远运行并对循环中的事件作出反应。事件循环中没有完成或新开始。当它运行时,它会运行。(更不用说,
run\u until\u complete
也会运行同一个事件循环,可能已经运行了几百次了)@poke,我认为
run\u until\u complete
只运行一次循环,如果任务中有内部循环,您所说的就完成了。这就是你的意思吗?