在扩展的Python脚本中有没有一种简单的方法来设置“检查点”?

8
为了解释我的问题,让我先给一些背景:我目前正在开发一个数据管道,其中有许多不同的步骤。每个步骤都可能出现问题,并且许多步骤需要一定时间(并非很长,但大约需要几分钟)。
因此,目前该管道在很大程度上由人员监督。分析师会逐步执行每个步骤,在Jupyter笔记本中运行Python代码,当遇到问题时,会进行少量的代码调整并重复执行该部分。
从长远来看,这里的目标是实现零人为干预。然而,在较短期内,我们希望使这个过程更加无缝。最简单的方法似乎是将每个部分拆分成自己的脚本,并有一个父脚本来运行每个部分并验证输出。但是,如果失败了,我们还需要能够重复运行具有相同设置的文件。
例如:
run a --> ✅
run b --> ✅ (b relies on some data produced by a)
run c --> ❌ (c relies on data produced by a and b)
// make some changes to c
run c --> ✅ (c should run in an identical state to its original run)

最明显的方法是将每个脚本的输出写入文件,并将所有这些脚本加载到下一个脚本中。这种方法可以行得通,但似乎有些不太优雅。数据库似乎是另一个有效的选择,但很多数据并不适合清晰地放入数据库格式中。
是否有人有任何建议可以实现我所寻求的目标?如果有任何不清楚的地方,我也非常乐意澄清任何问题!

这个:http://www.cs.sjsu.edu/~pearce/modules/patterns/distArch/pipeline.htm 或者这个: https://gerardnico.com/data/processing/stream/stream 或者这个: https://learn.microsoft.com/en-us/azure/architecture/patterns/pipes-and-filters 或者这个: https://dev59.com/2nPYa4cB1Zd3GeqPmrxr - Rob Conklin
2个回答

9
你可以创建一个对象来维护每个步骤后的状态,并使用pickle将该对象序列化到文件中。
然后,你的Python脚本需要解pickling该文件,并根据状态决定需要从哪一步开始。
参考链接:https://wiki.python.org/moin/UsingPickle

这是一个非常有趣的想法,感谢您的建议! - Peter Dolan

1
队列和管道在架构上非常良好地配合。其中一个更好的部分是,较慢的阶段可以获得比较快的阶段更多的工作人员,从而根据工作负载优化管道。

我对此很感兴趣。你能详细解释一下吗?或者给我指点一个可以阅读更多信息的资源? - Peter Dolan
2
这个:http://www.cs.sjsu.edu/~pearce/modules/patterns/distArch/pipeline.htm 或者这个:https://gerardnico.com/data/processing/stream/stream 或者这个:https://learn.microsoft.com/en-us/azure/architecture/patterns/pipes-and-filters 或者这个:https://dev59.com/2nPYa4cB1Zd3GeqPmrxr - Rob Conklin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接