首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >推荐的python科学工作流管理工具,它根据参数状态而不是时间来定义依赖完整性?

推荐的python科学工作流管理工具,它根据参数状态而不是时间来定义依赖完整性?
EN

Stack Overflow用户
提问于 2020-03-30 19:49:43
回答 1查看 189关注 0票数 2

对于我来说,从自定义的科学工作流管理(python)转向一些团队工作的时间已经过去了。简而言之,我的工作流程涉及长时间运行的(天)流程,其中包含大量共享参数。作为依赖图,节点是产生输出或执行某些其他工作的任务。这在工作流工具中似乎相当普遍。

然而,我需要的关键是每个任务都是由它所需的参数定义的。根据这些参数及其依赖项的所有参数的状态实例化任务。因此,如果一个任务已经根据给定的参数状态完成了它的作业,那么它就是完成的,并且不会重新运行。此参数状态不是全局参数状态,而只是与DAG的该部分相关的状态。这种对参数状态而不是完成时间的依赖似乎是我的需求和现有工具之间的本质区别(至少我从Luigi和Airflow的快速浏览中收集到的)。完成时间可以是一个这样的参数,但通常它不是确定DAG的(重新)运行的时间,而是确定参数状态是否与调用任务的参数状态一致。对我来说,‘参数爆炸’以及与参数状态和DAG的关系不是无关紧要的问题,但这些不是我的问题。

我的问题是,哪种现有的python工具更容易定义与此参数状态相关的“完整”?有人建议Luigi可以通过编写一个自定义的complete方法来兼容我的需求,该方法可以将构建数据(‘target’)的元数据与所需的参数状态进行比较。

那气流呢?我没有看到任何关于这个问题的提及,但只是简单地阅读了一下文档。由于添加此功能是一项重要的工作,这会占用我的“科学”工作,因此我想从更好的工具开始。Airflow肯定有动力,但我的需求可能离它的目的太远了。定义完整的参数状态有两个原因-- 1)对于复杂的长时间运行的任务,我不能每次在非常大的全局参数状态下更改某些参数时都重新运行DAG;2)出于科学和数据完整性的原因,我需要知道中间和最终结果是如何产生的。

EN

回答 1

Stack Overflow用户

发布于 2020-04-06 16:42:12

我进一步研究了Luigi和Airflow,据我所知,它们都不适合根据我的需要进行修改。主要的不兼容性是这些工具基本上基于预先确定的DAG/工作流。我的现有框架在实例化的和完全指定的DAG上运行,这些DAG是在运行时发现的,而不是在外部简洁地描述的--这是必要的,因为对于给定的请求,了解每个任务是否完成取决于许多参数值的组合,这些参数值定义了该任务的输出和所有上游任务的已用输出。通过实例化,我指的是各个运行的“中间”结果,每个结果都由复制(承受任何随机元素)来自该任务的相同输出所必需的完整参数状态(变量值)描述。

因此,提前在DAG上运行的“Scheduler”是没有用的。

一般来说,大多数现有的工作流框架,至少在python中,似乎更多地被设计为以一种易于扩展和健壮的方式,通过并行化来自动化许多相对简单的任务,而很少强调更复杂的分析的增量构建,以及在可能的情况下必须重用的结果,以链接复杂和昂贵的计算任务,这些任务的输出可能会被用作额外的不可预见的分析的输入。

今天早上我刚刚发现了'Prefect‘工作流程,我很想了解更多--至少它显然资金充足;-)。我最初的感觉是,它可能对预调度的依赖较少,因此更具流动性,更容易适应我的需求,但这只是一种预感。在许多方面,我的一些更复杂的“单一”任务可能非常适合包装整个Prefect流,如果它们很好地一起玩。我的需求似乎在深度复杂的DAG频谱的另一端(我不会尝试写出我的需求!)永远不会结束下游的添加。

我将更仔细地研究Prefect和Luigi,看看我可以借鉴什么来使我的框架更健壮,更少巴洛克风格。或者我可以在Prefect中添加一层完整的数据描述...

更新--与Prefect人员讨论,明确我需要从底层的Dask开始,看看它是否足够灵活--也许使用Dask delayed或futures。显然,Dask是非同寻常的。建立在Dask之上的Graphchain是在正确的方向上的一步,它促进了在由代码库和参数的散列识别的依赖‘链’上计算的‘中间’输出的永久存储。与我需要的非常接近,尽管对那些确定定义输出的参数进行了更明确的处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60938401

复制
相关文章
使用HSB而不是RGB来定义颜色
有多种方法可以在代码中定义颜色。最常用的方法是指定三种基色的值 - 红色、绿色和蓝色 (RGB)。本文通过指定色调、饱和度和亮度 (HSB) 的值来探索替代机制的使用。可以以更直观的方式使用 HSB 属性来创建颜色搭配良好的调色板。
韦弦zhy
2023/01/06
2.8K0
使用HSB而不是RGB来定义颜色
android推荐使用dialogFrament而不是alertDialog
DialogFragment在android 3.0时被引入。是一种特殊的Fragment,用于在Activity的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。 在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。 2、 好处与用法 使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。且Dia
xiangzhihong
2018/01/29
2.4K0
android推荐使用dialogFrament而不是alertDialog
​让人工智能融入课堂,而不是取代它
教育部在2018年对外印发了《教育信息化2.0 行动计划》,该计划指出“新时代赋予了教育信息化新的使命,也必然带动教育信息化从1.0 时代进入2.0 时代”。 在这之后,中国教育的减负增效、全面均衡,教育智能化变革大幕徐徐开启。
IT创事记
2022/06/17
4780
​让人工智能融入课堂,而不是取代它
Python调用Ant构建时根据构建状态来决定命令行退出状态
使用os.system()调用Ant构建时,不论构建成功还是失败(BUILD SUCCESSFUL/BUILD FAILED),命令行的总是正常退出 要解决问题: 首先想到的是获取ant命令的返回值,根据返回值来决定命令行的退出状态(0或非0,0代表正常退出) 查阅相关资料,得知python调用系统命令的函数有:os.system、os.popen、commands.getstatusoutput/getstatus/getoutput、subprocess.Popen等。
donghui
2019/04/19
1.1K0
使用DDD来构建你的REST API,而不是CRUD
REST围绕着资源这个概念而构建的,然后用URI来表示。然后一个HTTP动词和资源URI组合起来对指定资源进行HTTP调用来执行操作。大多数REST框架提供了指定资源名称的生成器,框架围绕着它来生成脚
ImportSource
2018/04/03
2.2K0
使用DDD来构建你的REST API,而不是CRUD
缺省参数是编译期间绑定的,而不是动态绑定
看一个程序 #include <iostream> using namespace std; class A { public: virtual void Fun(int number = 10) { std::cout << "A::Fun with number " << number<<endl; } }; class B: public A { public: virtual void Fun(int number = 20) { std::cout << "B::Fun wi
用户1624346
2018/04/17
1K0
python依赖管理工具poetry
作者:matrix 被围观: 1,340 次 发布时间:2021-11-30 分类:Python | 一条评论 »
HHTjim 部落格
2022/09/26
5090
GO 依赖管理工具go Modules(官方推荐)
以前写过一篇关于go管理依赖包工具 dep的文章,当时认为dep将会成为官方依赖工具,现在看来是自己图样图斯内幕破了,正如官方一直提到dep是“official experiment”官方实验项目的那样,随着go modules 在go1.11版推出,go1.12版功能不断改进,再到go1.13版完善优化,正式扶正。预计dep将来也只能定格在“official experiment”了。
孤烟
2020/09/27
1.8K1
我为什么推荐大家使用 Nginx 而不是 Apache?
最后Nginx和Apache的差异总结成一句话就是:“Nginx适合处理静态请求和反向代理,Apache适合处理动态请求”。但这个差异化只有在请求量达到一定的阈值时表现差异才能表现出来,对于 WordPress 、 Typecho 等等这里动态站点来说某一天流量达到这个阈值的时候,还可以部署LNMPA这样的生产环境来应对和解决。所以流量阈值需求不到的时候,选择Nginx是性价比最好的选择了。
明月登楼的博客
2019/05/15
2.5K0
我为什么推荐大家使用 Nginx 而不是 Apache?
【说站】为什么推荐大家使用 Nginx 而不是 Apache?
无论是 Nginx 还是 Apache 都是 Web 服务器应用,通俗点说我们的网站都是需要 Web 服务器应用来展现给客户的,而服务器是供 Web 服务器应用正常稳定的运行的基础。所以说选择好 Web 服务器应用是会影响到网站性能表现的,甚至会影响到用户的浏览体验。而目前比较主流的 Web 服务器应用也就是 Nginx 和 Apache 了,今天就给大家说明一下为什么我一直都推荐大家使用 Nginx 而不是 Apache?
很酷的站长
2022/11/24
5460
【说站】为什么推荐大家使用 Nginx 而不是 Apache?
为什么 wait/notify/notifyAll 在 Object 类定义而不是 Thread 类?
作者:Yujiaao 来源:segmentfault.com/a/1190000019962661
Java技术栈
2020/06/16
1.5K0
小白建站我为什么更推荐使用WordPress而不是typecho?
很多人在选择博客站时总是纠结使用WordPress还是typecho,亦或是像emlog,hexo,zblog等等,大多数大佬都是推荐typecho,一致意见是wp博客臃肿,那么,wp占地大吗?对的。但我还是推荐使用wp建站,下面说说我的看法。
深白鸭
2023/03/12
1.5K0
小白建站我为什么更推荐使用WordPress而不是typecho?
为什么特征工程要用 SQL 而不是 Python
我们常说机器学习是一门实验科学。所以相比较传统工程而言,机器学习分成两个大的阶段:
用户2936994
2022/05/18
8410
为什么特征工程要用 SQL 而不是 Python
Python | Pipenv官方推荐的python包管理工具
Pipenv是一款旨在将所有包管理工具(如bundler, composer, npm, cargo, yarn等)的优点集中应用于python领域中的工具。它对各个平台都有很好的支持。
用户1634449
2018/10/18
1K0
用十年的时间学会编程,而不是21天
今天是周末,难得有闲暇,抽点时间和大家分享一些心得和感受,希望能够一些在迷茫中的同学带来一点帮助。
TechFlow-承志
2020/03/24
5150
用十年的时间学会编程,而不是21天
数据科学的工作流程
本文浪尖主要讲讲数据分析企业内的工作流程。 随着,云计算使得计算能力的提示,大数据技术的飞速发展,数据也是备受企业重视,企业内部都是在想法设法的得到你的数据,分析你,然后从这个过程中获利。强调一点,不仅是从数据分析的结果中获利,比如推荐系统等,而且从数据采集到展示,企业都是可以获利的。由此可见,数据的重要性。 数据分析既然如此重要,那么数据分析必然也衍生出了一套完整的技术流程和技术框架,而这套技术流程及框架是本文讨论的重点。 数据科学的工作流程 现在企业中标准的数据分析过程如下: 首先,我们生活在
Spark学习技巧
2018/03/20
1.6K0
数据科学的工作流程
为什么是AUC值而不是GSEA来挑选转录因子呢
通过学习,我们知道这个RcisTarget包内置的motifAnnotations_hgnc是16万行,可以看到每个基因有多个motif。而且下载好的 hg19-tss-centered-10kb-7species.mc9nr.feather 文件,也是 24453个motifs的基因排序信息。但是我们留下来了一个悬念,如何从几万个注释结果里面挑选到最后100个富集成功的motif呢?
生信技能树
2020/12/03
1.2K0
为什么是AUC值而不是GSEA来挑选转录因子呢
2021 最 Top 的编程语言是 Python,而不是 JavaScript?
近日,IEEE Spectrum 发布了 2021 年度编程语言排行榜,其综合排行榜显示,前五名依次是 Python、Java、C、C++ 和 JavaScript。 排行榜依然涵盖 4 种不同类型的编程语言,分别是用于开发网站和应用的语言(Web),用于企业、桌面和科学应用的语言(Enterprise),用于移动设备端的语言(Mobile)以及用于嵌入式环境的语言(Embedded)。
深度学习与Python
2021/09/22
8680
Python 函数的参数类型定义
函数的参数类型定义 参数定义类型的方法 def person(name:str, age:int=33): print(name, age) 函数定义在python3.7之后可用 函数不会对参数类型进行验证 代码 # coding:utf-8 def add(a: int, b: int = 3): print(a + b) add(1, 2) # add('hello', 'xiaomu') def test(a: int, b: int = 3, *args: int, **kw
Zkeq
2022/05/18
1.7K0
点击加载更多

相似问题

如何根据参数的某种质量而不是它的确切类型来指定参数类型?

32

在Matlab中简单地根据时间(而不是日期)来定义计时器

24

根据日期而不是持续时间来获取白日跨度?

20

如何根据访问时间而不是创建时间来确定等待CompletableFutures的优先级?

38

Python科学记数法使用D而不是E

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档