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

2024-02-0209:47:49后端程序开发Comments265 views字数 1212阅读模式

创建协程任务

基本用法

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())
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/59019.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/59019.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定