搜索
首页后端开发Python教程耐用的 Python:构建防弹的长期运行工作流程,变得简单

Durable Python: Building Bullet-Proof Long-Running Workflows, Made Simple

在现代软件开发中,创建强大的工作流程来连接来自各种服务的 API 并处理同步和异步事件是一个常见的挑战。传统方法涉及使用队列、微服务和状态管理系统的组合来构建可扩展的应用程序。虽然有效,但这种架构带来了巨大的开销:设置和维护消息队列等基础设施、运行服务器或 lambda 函数、管理数据库中的状态以及实现复杂的错误处理机制。

如果有一种更简单、更可靠的方法来处理长时间运行的工作流程,而无需管理所有这些基础设施的麻烦,该怎么办?这就是 Durable Python 的目标,要尝试它,请注册 Beta。

长期运行流程的朴素解决方案的问题

假设您想要监控 GitHub 中的拉取请求 (PR)。每次打开新的 PR 时,您都希望创建一个专用的 Slack 频道进行讨论并发送每日提醒,直到 PR 关闭或合并。这听起来很简单,所以您可能认为可以使用基本的 Python 函数来解决它(这是 ChatGPT 生成的基本 Python 函数):

@app.route('/webhook', methods=['POST'])
def github_webhook():
    data = request.json
    if 'pull_request' in data and data['action'] == 'opened':
        pr_number = data['pull_request']['number']
        pr_url = data['pull_request']['html_url']
        # Create a new Slack channel for the PR
        channel_id = create_slack_channel(pr_number)
        send_slack_notification(channel_id, pr_number, pr_url)
        # Periodically check the PR status and send reminders until it's closed or merged
        while True:
            time.sleep(3600)  # Wait for 1 hour before checking the status again
            pr_status = check_pr_status(pr_number)
            if pr_status == 'open':
                send_slack_notification(channel_id, pr_number, pr_url)
            else:
                break
    return jsonify({'status': 'ok'})

这段代码似乎可以处理任务,但它只适合“快乐流程”场景。在实际应用中,这种简单的方法是不够的。 while 循环依赖于连续的服务器正常运行时间,但这是无法保证的。进程可能会崩溃,服务器可能会重新启动,突然间,您的工作流程就会中断。

实际解决方案:事件驱动的应用程序

更可靠的方法涉及构建事件驱动的应用程序。在这里,您将使用队列来侦听 GitHub 事件,使用 cron 作业来发送提醒,使用数据库来存储 PR 和通道状态,以及使用函数来处理这些事件。通常,此设置在云基础设施上运行,利用 AWS Lambda 等服务进行部署和执行。

虽然这种方法可行且稳健,但它也需要大量的设置、维护和专业知识。管理基础设施、确保正常运行时间和处理错误状态需要大量资源和熟练的团队。

输入耐用的 Python:简单性与可靠性的结合

如果您可以将简单的 Python 代码与异步设计的可靠性结合起来会怎么样?如果 Python 能够保证即使进程崩溃或服务器重新启动,它也会从上次中断的地方继续执行,会怎么样?

AutoKitteh 通过 Durable Python 恰恰解决了这一挑战。使用 Durable Python,用户编写 Python 代码,而系统确保如果进程重新启动,它会从同一点继续运行。虽然存在限制(例如,长时间停机可能并不理想),但对于大多数用例,此解决方案都可以完美运行。

Durable-Python 提供什么

Durable-Python 使您无需手动管理状态,从而使您能够将工作流程编写为连续流,而不是事件驱动的状态机,而事件驱动的状态机在构建和调试方面可能具有挑战性。 AutoKitteh 作为基础设施,具有内置队列以及与外部应用程序和 API 的集成,可以轻松地在 Python 中快速开发强大的工作流程。

它是如何运作的

这并不涉及任何魔法——只是坚实的工程。 AutoKitteh 由 Temporal 提供支持,Temporal 是一个用于构建持久工作流程的框架。时态需要特定的编码方式,包括对确定性、幂等性和其他概念的理解,以确保可靠性。 AutoKitteh 抽象了这些复杂性,允许开发人员编写标准的 Python 代码。在幕后,任何具有副作用的函数都会转换为时间活动。作为开发者,您不必担心这些细节——只需专注于编写业务逻辑即可。

更多技术细节,请参阅 AutoKitteh 文档。

有费用吗?

当然,每一个抽象都有一个价格。在底层,Durable Python 会记录工作流程,以便在发生故障后进行恢复,这会产生一些存储和性能成本。

Durable Python 专为编排 API 而设计,而不是构建数据应用程序。如果您需要高性能应用程序,您应该考虑构建自定义解决方案。但是,如果您想以最少的开发和基础设施投资快速开发可靠的工作流程,Durable Python 可能是一个不错的选择。

实际应用

耐用的Python可以应用于广泛的工作流程,特别是在可靠性至关重要的领域,例如:

  • API 编排 - 构建内部可靠的工作流程。
  • DevOps 自动化:自动化部署管道或代码审查自动化,并保证从故障中恢复。
  • ChatOps:与聊天平台集成以自动化团队通知并管理工作流程。
  • MLOps:确保长时间运行的机器学习工作流程在中断的情况下仍能无缝继续。

可以在此处找到工作流程示例。

结论:更少的代码,更少的麻烦

由 AutoKitteh 提供支持的持久 Python 概念,使开发人员能够使用最少的代码构建、部署和管理可靠的工作流程自动化。持久执行和无缝恢复在幕后处理,因此您可以专注于真正重要的事情 - 您的业务逻辑。

虽然有许多优秀的工具可以实现持久性(例如 Temporal 和 Restate),但 Durable-Python 提供了一种快速、简单且经济高效的方法来实现相同的结果。

以上是耐用的 Python:构建防弹的长期运行工作流程,变得简单的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
您如何将元素附加到Python列表中?您如何将元素附加到Python列表中?May 04, 2025 am 12:17 AM

toAppendElementStoApythonList,usetheappend()方法forsingleements,Extend()formultiplelements,andinsert()forspecificpositions.1)useeAppend()foraddingoneOnelementAttheend.2)useextendTheEnd.2)useextendexendExendEnd(

您如何创建Python列表?举一个例子。您如何创建Python列表?举一个例子。May 04, 2025 am 12:16 AM

TocreateaPythonlist,usesquarebrackets[]andseparateitemswithcommas.1)Listsaredynamicandcanholdmixeddatatypes.2)Useappend(),remove(),andslicingformanipulation.3)Listcomprehensionsareefficientforcreatinglists.4)Becautiouswithlistreferences;usecopy()orsl

讨论有效存储和数值数据的处理至关重要的实际用例。讨论有效存储和数值数据的处理至关重要的实际用例。May 04, 2025 am 12:11 AM

金融、科研、医疗和AI等领域中,高效存储和处理数值数据至关重要。 1)在金融中,使用内存映射文件和NumPy库可显着提升数据处理速度。 2)科研领域,HDF5文件优化数据存储和检索。 3)医疗中,数据库优化技术如索引和分区提高数据查询性能。 4)AI中,数据分片和分布式训练加速模型训练。通过选择适当的工具和技术,并权衡存储与处理速度之间的trade-off,可以显着提升系统性能和可扩展性。

您如何创建Python数组?举一个例子。您如何创建Python数组?举一个例子。May 04, 2025 am 12:10 AM

pythonarraysarecreatedusiseThearrayModule,notbuilt-Inlikelists.1)importThearrayModule.2)指定tefifythetypecode,例如,'i'forineizewithvalues.arreaysofferbettermemoremorefferbettermemoryfforhomogeNogeNogeNogeNogeNogeNogeNATATABUTESFELLESSFRESSIFERSTEMIFICETISTHANANLISTS。

使用Shebang系列指定Python解释器有哪些替代方法?使用Shebang系列指定Python解释器有哪些替代方法?May 04, 2025 am 12:07 AM

除了shebang线,还有多种方法可以指定Python解释器:1.直接使用命令行中的python命令;2.使用批处理文件或shell脚本;3.使用构建工具如Make或CMake;4.使用任务运行器如Invoke。每个方法都有其优缺点,选择适合项目需求的方法很重要。

列表和阵列之间的选择如何影响涉及大型数据集的Python应用程序的整体性能?列表和阵列之间的选择如何影响涉及大型数据集的Python应用程序的整体性能?May 03, 2025 am 12:11 AM

ForhandlinglargedatasetsinPython,useNumPyarraysforbetterperformance.1)NumPyarraysarememory-efficientandfasterfornumericaloperations.2)Avoidunnecessarytypeconversions.3)Leveragevectorizationforreducedtimecomplexity.4)Managememoryusagewithefficientdata

说明如何将内存分配给Python中的列表与数组。说明如何将内存分配给Python中的列表与数组。May 03, 2025 am 12:10 AM

Inpython,ListSusedynamicMemoryAllocationWithOver-Asalose,而alenumpyArraySallaySallocateFixedMemory.1)listssallocatemoremoremoremorythanneededinentientary上,respizeTized.2)numpyarsallaysallaysallocateAllocateAllocateAlcocateExactMemoryForements,OfferingPrediCtableSageButlessemageButlesseflextlessibility。

您如何在Python数组中指定元素的数据类型?您如何在Python数组中指定元素的数据类型?May 03, 2025 am 12:06 AM

Inpython,YouCansspecthedatatAtatatPeyFelemereModeRernSpant.1)Usenpynernrump.1)Usenpynyp.dloatp.dloatp.ploatm64,formor professisconsiscontrolatatypes。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版