asyncio 异步协程

方式一:

import asyncio
import time


def taskCallback(ret):
    print('Callback: task result {}'.format(ret.result()))

async def foo(i):   # 使用async关键字定义异步函数
    print('task {} start'.format(i))
    await asyncio.sleep(i)      # 休眠一段时间
    print('task {}: {}s end'.format(i, i))
    return i * i

async def main1():
    # 构建任务列表
    tasks = [
        asyncio.create_task(foo(1)),
        asyncio.create_task(foo(2)),
        asyncio.create_task(foo(3))
    ]

    tasks[0].add_done_callback(taskCallback)

    # 方式一写法:
    await asyncio.wait(tasks)     # 阻塞

    for task in tasks:
        print(task.done(), task.result())

start = time.time()
asyncio.run(main1())

print('耗时: {}s'.format(time.time() - start))

方式二:

import asyncio
import time


def taskCallback(ret):
    print('Callback: task result {}'.format(ret.result()))

async def foo(i):   # 使用async关键字定义异步函数
    print('task {} start'.format(i))
    await asyncio.sleep(i)      # 休眠一段时间
    print('task {}: {}s end'.format(i, i))
    return i * i

async def main1():
    # 构建任务列表
    tasks = [
        asyncio.create_task(foo(1)),
        asyncio.create_task(foo(2)),
        asyncio.create_task(foo(3))
    ]

    tasks[0].add_done_callback(taskCallback)

    # 方式二写法:
    rets = await asyncio.gather(*tasks)
    print(rets)

start = time.time()
asyncio.run(main1())

print('耗时: {}s'.format(time.time() - start))

Last updated