python 任务调度

我要开发同款
proginn12335967022023年09月26日
172阅读
开发技术python
所属分类webappweb

作品详情

这个项目现在正在开发中,主要解决自己工作中的一些痛点。在科研中,每个项目可以拆分为很多部分,每个部分可能需要较长的时间运行,不同的部分可能可以并行,可能存在依赖关系,同时希望已经调试完成的部分缓存中间结果,以便开发下一部分是不用重新计算已有的部分节省时间,而当前面的部分有修改的时候,所有依赖他的部分都需要重新运行得到正确结果。
这个流程手动管理就会很困难。因此可以把每个独立的部分单独写在一个py文件里面,文件头用注释写了需要的来自其他部分的输入,然后这个项目负责
1. 读取整个目录,解析文件头的信息,建立依赖图
2. 根据依赖关系的顺序依次运行每个任务
3. 保存中间结果,记录每个任务运行时的代码hash以及依赖的hash
4. 监听文件变化,在文件改动时检测每个任务是否需要重新运行,并依次运行所有受影响的项目
5. 提供依赖图,一个简单的webUI,命令行运行接口

我负责所有的工作
webUI使用了NiceGUI开发,对小型webapp来说更方便快捷
文件头使用yaml编码,使用AsyncIO进行并发任务处理,使用进程池在单独进程里面运行任务。

主要难点:
1. 追踪任务状态,以较小的代价更新状态是比较困难的,实现上使用了大量装饰器来简化工作,对代码重构了多次
2. 进程间通信和同步,这个地方踩了不少坑,尤其后期想支持进度条,试了挺多模式
3. 保持单个python文件可运行,为了保持单个python任务在没有这个框架的情况下也能运行,尽量少的对代码进行修改,并且提供了一个运行函数,载入缓存并且运行任务,这样在debug以及开发新任务的时候很有用

图片中展示了一个实际项目的依赖图
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论