Python代码片段-断点任务

server/2025/2/28 11:03:33/

使用Python处理一堆长耗时任务的时候,为了防止异常退出程序或者手动退出程序后丢失任务进度,可用使用断点的方式记录任务进度,下次重载任务后,继续运行上次未完成的任务即可。

这里用json文件作为数据持久化的方式,免去了使用数据库来作为持久的依赖问题,为了一个小的任务来搭建一套数据库,耗时耗力,得不偿失,不如选择本地文件来做简单的持久化,就算丢失部分任务进度,少数任务重新执行所消耗的时间完全处于容忍范围内。另外使用json文件记录任务进度,可用修改json文件来人为干预任务的执行情况,也是不错的一个优点

python">import json
import time
import osclass Task:def __init__(self, task_file='task_progress.json'):self.task_file = task_fileself.progress = []if os.path.exists(self.task_file):self.load_progress()def load_progress(self):"""加载任务进度"""with open(self.task_file, 'r') as f:data = json.load(f)self.progress = data.get('progress', 0)def save_progress(self):"""保存任务进度"""data = {'progress': self.progress}with open(self.task_file, 'w') as f:json.dump(data, f,indent=4, separators=(',', ': '))f.flush()os.fsync(f.fileno())  # 确保数据已写入磁盘def execute_task(self):legacy_tasks = [t  for t in self.progress if t['finish'] ==0 ]for i, v in enumerate(legacy_tasks):print(f"执行任务 {v['key']} ...")time.sleep(3)  # 模拟任务执行的时间self.mark_finished( v['key']) # 更行进度self.save_progress()  # 每次执行后保存进度print(f"任务 {v['key']} 完成。")print("任务完成!")def flush_progresses(self):tasks = [{"key":"xxx1"},{"key":"xxx2"},{"key":"xxx3"}]self.progress = [ {"key" : t['key'], 'finish':0} for t in tasks]self.save_progress()def mark_finished(self, key):"""标记完成"""print(key)for i, t in enumerate(self.progress) :if t ['key'] ==  key :self.progress[i]['finish'] = 1breakself.save_progress()def count(self):"""查询未完成"""return len( [t for t in self.progress if t['finish'] == 0])if __name__ == "__main__":task = Task()# 第一次生成任务列表,下次任务时候注释掉此行task.flush_progresses()try:task.execute_task()except KeyboardInterrupt:print("\n任务被中断,进度已保存。")

http://www.ppmy.cn/server/171276.html

相关文章

信号在linux内核的表示

在Linux内核中,信号的表示和处理机制是进程间通信和进程控制的重要组成部分。以下是信号在Linux内核中的表示及相关机制的详细说明: 1. 信号在内核中的表示 在Linux内核中,每个信号有三个关键属性: 阻塞标志(Block&…

使用 Polars 进行人工智能医疗数据分析(ICU数据基本测试篇)

引言 在医疗领域,数据就是生命的密码,每一个数据点都可能蕴含着拯救生命的关键信息。特别是在 ICU 这样的重症监护场景中,医生需要实时、准确地了解患者的病情变化,以便做出及时有效的治疗决策。而随着医疗技术的飞速发展&#x…

变换队列c++

题目描述 班上的同学们每个人都有各自的学号d(1≤d≤100) ,每个同学的学号各不相同。 所以学号可以用来唯一标识班上的某个同学。 假设有个班有五名同学(学号分别为 1、2、3、4、5 ),他们排了两次队, 第一次排队的…

Docker 部署 Spring Cloud 项目:实战指南与经验分享

一、引言 在当今的微服务架构开发中,Spring Cloud 凭借其丰富的组件和强大的功能,成为了构建分布式系统的热门选择。而 Docker 作为一种轻量级的容器化技术,能够实现应用的快速部署、隔离和迁移,极大地提高了开发和运维的效率。将…

2025年2月最新SCI-鹰鱼优化算法HawkFish Optimization Algorithm-附Matlab免费代码

引言 本期介绍了一种基于鹰鱼独特的性别转换行为建模的生物启发算法——鹰鱼优化算法HawkFish Optimization Algorithm,HFOA。该算法于2025年2月最新发表在JCR2区,中科院3区SCI期刊Electronics 鹰鱼在环境刺激下表现出一种独特的性别变化现象&#xff0…

【含文档+PPT+源码】基于过滤协同算法的旅游推荐管理系统设计与实现

项目介绍 本课程演示的是一款基于过滤协同算法的旅游推荐管理系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套…

嵌入式产品级-超小尺寸游戏机(从0到1 硬件-软件-外壳)

Ultra-small size gaming console。 超小尺寸游戏机-Pico This embedded product is mainly based on miniaturization, followed by his game functions are also very complete, for all kinds of games can be played, and there will be relevant illustrations in the fo…

如何确保海外线路的通话质量

2024年最吓人的一句话,“不出海必出局“!确实国内语音的环境太卷了,大家都开始关注语音线路怎么出海了。 对于出海,OKCC还是跟国内一样,只提供系统,不做运营,不做线路资源。 但是线路又是必不…