如何在Python3.6中执行2个协同路由

如何在Python3.6中执行2个协同路由,python,python-3.x,Python,Python 3.x,在我的Python3.6程序中,无法并行执行两个协程。以下是一个例子: import asyncio, time def main(): loop = asyncio.get_event_loop() loop.run_until_complete(start_coros()) async def start_coros(): await coro1() await coro2() async def coro1(): print("coro1"

在我的Python3.6程序中,无法并行执行两个协程。以下是一个例子:

import asyncio, time

def main():
    loop = asyncio.get_event_loop()
    loop.run_until_complete(start_coros())


async def start_coros():
    await coro1()
    await coro2()


async def coro1():
    print("coro1")
    time.sleep(3000)


async def coro2():
    print("coro2 - we want to get here")


if __name__ == "__main__":
    main()
如您所见,第一个协同路由首先执行,但第二个不并发运行

你能告诉我如何同时运行它们吗

请提前感谢您的帮助

以“并行”方式运行两个协同程序,创建任务:

async def start_coros():
    # ensure_future -> create_task in Python 3.7
    tasks = [asyncio.ensure_future(coro()) for coro in (coro1, coro2)]
    await asyncio.wait(tasks)
然而,
coro1
中存在一个巨大的问题<代码>异步IO基于协作调度。一次只能运行一个协同程序。调度器在协同路由之间切换,但这只能在运行的协同路由等待某些东西时发生。如果协同程序在
等待
之间花费太多时间,则该程序似乎没有响应。因此,避免使用time.sleep()


有没有办法让协同程序故意“屈服”于调度程序?@VPfB谢谢你的回答。我需要将不同的参数传递给
coro1
coro2
。我如何做到这一点?假设
coro1
被定义为
def coro1(word):print(word)
coro2
被定义为
def coro2(number):print(number)
,那么
tasks=[asyncio.sure_future(coro())for coro in(coro1,coro2)]
在这种情况下是什么样子?@quamrana Yes,这是它的命令:
wait asyncio.sleep(0)
@JeniaIvanov试试这个:
tasks=[asyncio.sure_future(coro)for coro in(coro 1(arg1)、coro 2(arg2))]
,或者不使用理解,只做一个简单的任务列表。
async def coro1():
    print("coro1")
    await asyncio.sleep(3000)