import time
import asyncio
async def countdown(number,n):
while n > 0:
print('T-minus', n, '({})'.format(number))
await asyncio.sleep(1)
n -= 1
#方式一
# start = time.time()
# loop = asyncio.get_event_loop()
# tasks = [
# asyncio.ensure_future(countdown('A', 2)),
# asyncio.ensure_future(countdown('B', 3))
# ]
#
# loop.run_until_complete(asyncio.wait(tasks))
方式二
def run():
loop = asyncio.get_event_loop()
# tasks = [
# asyncio.ensure_future(countdown('A', 2)),
# asyncio.ensure_future(countdown('B', 3))
# ]
# 下面这种创建任务的形式等同于上面的tasks 即,asyncio.ensure_future 与 loop.create_tasks相等
tasks = [
loop.create_task(countdown('A', 2)),
loop.create_task(countdown('B', 3))
]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
if __name__ == '__main__':
run()
协程的使用,也是针对任务,即函数功能而言。对一些阻塞的函数,可以使用协程并发方式,提高效率。并发必须注册函数,即使用create_tasks, 或ensure_future ,不用不会有并发。协程的优点就是,完全由用户自己控制,这一点不像线程,线程开启,运行怎么样是不受用户控制的。同样,不耗资源,至始至终,都是一个线程在运行