必要时,主循环运行协程将会完成某些事情。从中,启动另一个不会阻止的协程。使用Python 3.5
import asyncio,time
async def cor1():
for i in range(10):
await asyncio.sleep(0)
print("cor1",i)
async def cor2():
for i in range(10):
await asyncio.sleep(0)
time.sleep(1)
print("cor2",i)
async def main():
asyncio.ensure_future(cor1())
asyncio.ensure_future(cor2())
print("cor3")
loop = asyncio.get_event_loop()
asyncio.ensure_future(main())
loop.run_forever()
现在主循环创建了两个协同程序。但它们并不是一个接一个地并行运行。在有人完成之前,另一个人不会开始工作。当然,你可以在不同的线程上运行它们并使用队列建立通信。但是有可能在python 3.5中使用asyncio来实现这一点
答案 0 :(得分:1)
这个决定帮助了我
import asyncio,time
from concurrent.futures import ProcessPoolExecutor
def cor1():
for i in range(10):
print("cor1", i)
time.sleep(2)
def cor2():
for i in range(10):
print("cor2", i)
time.sleep(1)
executor = ProcessPoolExecutor(2)
loop = asyncio.get_event_loop()
asyncio.ensure_future(loop.run_in_executor(executor, cor1))
asyncio.ensure_future(loop.run_in_executor(executor, cor2))
loop.run_forever()
答案 1 :(得分:0)
这是一种可以并行运行它们的方法:
import asyncio
async def cor1():
for i in range(10):
await asyncio.sleep(1)
print("cor1", i)
async def cor2():
for i in range(10):
await asyncio.sleep(1)
print("cor2", i)
loop = asyncio.get_event_loop()
cors = asyncio.wait([cor1(), cor2()])
loop.run_until_complete(cors)
请注意time.sleep(1)
(与asyncio.sleep(1)
不同)是阻止调用,不会同时运行。
Luciano Ramalho的书 Fluent Python 有关于协程和asyncio
的精彩篇章......以防万一。