Python开发:如何创建、运行和取消asyncio协程任务?

创建协程任务

基本用法

import asyncio


async def add(a, b):
    v = a + b
    await asyncio.sleep(v / 1000)
    return v


async def demo():
    # 创建协程任务
    t = asyncio.create_task(add(33, 333))
    # 执行协程任务
    r = await t
    print(r)


# 运行协程
asyncio.run(demo())

创建多个任务

import asyncio


async def add(a, b):
    v = a + b
    await asyncio.sleep(v / 1000)
    return v


async def demo():
    # 创建协程任务
    t1 = asyncio.create_task(add(33, 333))
    t2 = asyncio.create_task(add(33, 333))
    t3 = asyncio.create_task(add(33, 333))
    # 执行协程任务
    r = await t1
    print(r)
    r = await t2
    print(r)
    r = await t3
    print(r)
    

# 运行协程
asyncio.run(demo())

取消任务

import asyncio


async def delay(name, n):
    print(f"协程{name}开始开始休眠,将等待{n}秒")
    await asyncio.sleep(n)
    print(f"协程{name}开始结束休眠,已等待{n}秒")
    return n


async def demo():
    # 创建协程任务
    t1 = asyncio.create_task(delay("t1", 3))

    # 判断协程是否执行结束
    wait_time = 0
    while not t1.done():
        # 每次等待1秒
        await asyncio.sleep(1)
        wait_time += 1
        # 取消任务
        if wait_time == 2:
            t1.cancel()
            print("超时取消任务")

    # 执行协程任务
    try:
        r = await t1
        print("任务正常结束:", r)
    except asyncio.CancelledError:
        print("由于任务超时,该任务已被取消")


# 运行协程
asyncio.run(demo())
THE END