【Python系列】异步任务的终止

news2024/12/26 0:18:10

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一.需求说明
      • 1.需求
      • 2.实现方式
      • 3.asyncio 介绍
    • 二.实现步骤
      • 1.异步终止任务

一.需求说明

1.需求

我有一个很耗时的异步任务,我希望能通过接口的方式终止这个异步任务,在 python 中如何实现呢?
在这里插入图片描述

2.实现方式

可以使用 asyncio 相关的 api 进行实现

  1. 创建并运行异步任务
  2. 取消异步任务
  3. api 地址

3.asyncio 介绍

asyncio 是 Python 标准库中的一个模块,用于编写单线程的并发代码。它使用 async/await 语法来编写异步代码,允许你以非阻塞的方式执行 I/O 操作,如网络请求、文件读写等。

以下是 asyncio 的一些关键特性:

  1. 事件循环(Event Loop)asyncio 使用事件循环来管理所有异步操作。事件循环是一个运行在后台的无限循环,它不断地检查是否有新的事件(如 I/O 完成、定时器到期等)需要处理。
  2. 协程(Coroutines):协程是 asyncio 中的并发单元,它们是使用 async def 定义的函数。协程在遇到 await 表达式时会暂停执行,直到等待的任务完成,然后继续执行。
  3. 任务(Tasks):任务是协程的执行单元。你可以使用 asyncio.create_task() 将协程包装成任务,然后将其放入事件循环中执行。
  4. FuturesFuture 是一个低级别的并发机制,它代表了一个尚未完成的操作。Future 可以被等待,当操作完成时,它会通知等待者。
  5. 同步原语asyncio 提供了同步原语,如锁(Lock)、事件(Event)、条件变量(Condition)和信号量(Semaphore),用于在异步代码中处理共享资源的同步。
  6. 流(Streams)asyncio 还提供了流(如 StreamReaderStreamWriter),它们用于处理网络通信中的二进制数据流。
  7. 子进程asyncio 允许你异步地创建和管理子进程。
  8. 超时和取消:你可以为异步操作设置超时,或者在必要时取消正在进行的操作。

二.实现步骤

1.异步终止任务

from typing import Any

from manager.graph.manager import GraphManager
from manager.schemas.manager import SchemasManager
from utils import logger
from fastapi import APIRouter
from manager.graph.query_graph import LocalQueryGraph
import time
import asyncio

GraphRouter = APIRouter(prefix="/test", tags=["测试管理"])
global task_map
task_map: dict[Any, Any] = {}

class GraphRouterMap:

    # 长时间运行的异步任务
    @staticmethod
    async def long_running_task():
        try:
            while True:
                # 模拟任务运行
                print("长时间运行的任务正在运行.....")
                await asyncio.sleep(2)
        except asyncio.CancelledError:
            print("任务被取消")

    @staticmethod
    @GraphRouter.get("/start", summary="启动任务", description="启动任务")
    async def start_task():
        # 启动长时间任务,并返回任务对象
        run_id = time.strftime("%Y%m%d-%H%M%S")
        task = asyncio.create_task(GraphRouterMap.long_running_task())
        task_map[run_id] = task
        return run_id

    @staticmethod
    @GraphRouter.get("/stop", summary="中止任务", description="中止任务")
    async def stop_task(run_id: str):
        task = task_map.get(run_id)
        task.cancel()
        return {"message": "任务取消请求已发送"}

在这里插入图片描述

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2098489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在S7-200 SMART CPU断电后保持高速计数器的当前值

1、首先是问题描述 S7-200 SMART的断电数据保持不支持高速计数器的范围设置,因此高速计数器的当前值在CPU每次断电后都会复位为数值0。要使S7-200 SMART高速计数器的当前值在CPU断电重启后依然保持,可以通过以下的编程来实现。 在此以通过向导生成高速…

MapStruct-Java实体转换利器

MapStruct-Java实体转换利器 MapStruct 概述MapStruct 使用例子UserDTOUserEntityUserDTOConverter ( mapstruct 接口)UserModelConverterImpl (自动生成)Service 层使用 MapStruct 概述 MapStruct 是一个用于生成映射器接口的代码生成库,主…

哪款宠物空气净化器性价比高,希喂、霍尼韦尔真实测评分享

几年前养宠物就帮我开启了一个全新的体验。下班回去后能看到它在门口处摇着尾巴,眨巴着个大眼的等我回家;每天醒来就看到它在我的身边安安静静的躺着,实在是一幅岁月静好的画面。但如果没有浮毛和异味困扰的话,我相信会更好。 随…

ChatTTS文本转语音本地Windows环境部署与远程生成AI音频实战流程

文章目录 前言1. 下载运行ChatTTS模型2. 安装Cpolar工具3. 实现公网访问4. 配置ChatTTS固定公网地址 前言 本篇文章主要介绍如何快速地在Windows系统电脑中本地部署ChatTTS开源文本转语音项目,并且我们还可以结合Cpolar内网穿透工具创建公网地址,随时随…

【BLE】四.SMP安全配对详解

设备配对流程 SMP专业术语 Paring(配对): 配对能力交换,设备认证,密钥生成,连接加密以及机密信息分发等 过程 Bonding(绑定) 配对中会生成一个长期密钥(LTK,…

022集—— 字符串按ascii码转数字——C#学习笔记

字符串分解为字符,字符分别转为ascii对应数字,最后数字连接起来转为字符串,具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Console…

【Next】3. 开发规范

笔记来源:编程导航 1、约定式路由 Next.js 使用 约定式路由,根据文件夹的结构和名称,自动将对应的 URL 地址映射到页面文件。 常见的几种路由规则如下: 1)基础规则:以 app 目录作为根路径,根…

mybatis-plus添加replace(自定义)方法,添加sql注入器SqlInjector

1. 继承DefaultSqlInjector import com.baomidou.mybatisplus.core.injector.AbstractMethod; import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; import com.baomidou.mybatisplus.core.metadata.TableInfo; import org.springframework.stereotype.Compon…

网络安全宣传周知识竞赛答题小程序怎么做?

随着网络安全宣传周的到来,越来越多的单位开始组织员工进行线上学习网络安全相关知识,其中举办网络安全知识竞赛答题活动的效果尤为明显,以下是一些网络安全答题系统的功能亮点: 多样化的题目类型与灵活的出题方式: 丰…

92.游戏的启动与多开-多开检测概述

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:易道云信息技术研究院 上一个内容:91.游戏的启动与多开-游戏启动 正常来说任何一个软件一双击就会打开,只要软…

一文读懂PINGPONG:0成本在普通家用机上运行多个网络节点

概述 l pingpong项目设计的愿景便是降低去中心化网络的节点运行难度,让普通人也可以参与到节点运行中; l 这个周期里,随着Depin和AIWeb3叙事的爆发,众多中小型去中心化网络面临着节点运行者供需不匹配的问题,严重影响…

MySQL约束与事务

一、MySQL约束 参考【MySQL】约束_mysql约束-CSDN博客 not null:非空约束unique:唯一性约束primary key:主键约束foreign key:外键约束check:检查约束default:默认值约束 如何添加约束 在CREATE TABLE时…

zyx青岛实训day34 初步了解Docker与套接字的应用

回顾 1、主从复制(高可用) 2、传统的主从复制 3、gtids事务型的主从复制 4、注意 1)server_id唯一 2)8.X版本需要get_ssl_pub_key 3)5.X不需要 4)change master to 5)stop | start slave 5…

YOLOv5调用海康工业相机实时检测

目录 一、调用海康工业摄像头 1.1 DirectShow插件安装 1.2 查找摄像头编号 1.3 摄像头调用测试 二、修改YOLOv5相关参数 2.1 detect.py修改 2.2 datasets.py修改 一、调用海康工业摄像头 现在可直接利用cv2.VideoCapture()接口调用海康机器人工业相机,首先在官…

【数据结构】二叉搜索树的功能实现详解

文章目录 二叉搜索树查找插入删除找到要删除的节点删除节点1. 要删除节点的左孩子为空2. 要删除节点的右孩子为空3. 要删除的节点的左右孩子都不为空 完整代码 二叉搜索树 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它…

IOS17双开微信且自动刷新

前提文件 需要在Sideloadly官网下载iTunes和iCloud这2个文件:https://sideloadly.io/, SideStore侧载商店官网下载另外4个文件:https://sidestore.io/ 如图,如果文件无法下载(需要科学上网)可以下载我的资源包尝试 安装步骤 …

C语言学习笔记 Day15(文件管理--下)

Day15 内容梳理: 目录 C语言学习笔记 Day14(文件管理--上)-CSDN博客 Chapter 10 文件操作 10.2 文件加密、解密 (1)文件加密 (2)文件解密 10.3 文件读取、写入 (1&#xff…

可视化数据大屏设计案例

可视化数据大屏开发-能源调度大屏展示 可视化数据大屏开发-房地产经营分析 可视化大屏开发-预售业务数据看板 可视化大屏开发-城市路况监测大屏

深入Redis:细谈持久化

Redis的数据是保存在内存中的,内存里面的数据是不持久的,要想做到持久化,必须要把在内存中的数据储存到硬盘上。 Redis速度非常快,数据只有在内存中才有这样的速度,但是为了持久,数据还是要想办法保存到硬…