【问题标题】:Running python script concurrently based on trigger基于触发器并发运行python脚本
【发布时间】:2021-10-18 16:00:56
【问题描述】:

用 Python 解决以下问题的最佳方法是什么?

我有实时数据流从用户应用程序进入我的面向对象存储(json 文件存储到亚马逊的 S3 存储中)。

收到每个 JSON 文件后,我必须在一定时间内(在本例中为 1 秒)处理文件中的数据并生成发送回用户的响应。这些数据正在由简单的 Python 脚本处理。

我的问题是,实时数据流可以同时从用户应用程序生成数百个 JSON 文件,我需要通过我的 Python 脚本运行这些文件,但我不知道如何以最佳方式处理这个问题.

我了解,解决此问题的方法是使用基于触发器的 Lambda,一旦从无服务器环境中的实时流上传,该 Lambda 将在每个文件的顶部执行作业,但是与使用此选项相比,此选项相当昂贵单个服务器实例运行并以某种方式触发内部作业。

感谢任何建议。谢谢。

【问题讨论】:

    标签: python amazon-s3 amazon-ec2 aws-lambda concurrency


    【解决方案1】:

    无服务器实际上比使用服务器便宜。当有一段时间没有活动时,它要便宜得多,因为您不需要为无所事事的服务器付费。

    您的要求中最难的部分是将响应发送回用户。如果一个对象被上传到 S3,就没有简单的方法来发回响应,甚至不清楚谁是发送文件的用户。

    您可以处理传入的文件,然后将响应存储回一个类似名称的对象中,然后客户端可以轮询 S3 以获取响应。这要求上传使用以某种方式生成的唯一名称。

    另一种方法是将数据发送到 AWS API Gateway,这可以触发 AWS Lambda 函数,然后直接将响应返回给请求者。无需服务器,自动扩展。

    如果您想使用 服务器,那么您需要一种方法让客户端使用对 S3 中 JSON 对象的引用(或使用数据本身)向服务器发送消息)。服务器需要运行一个可以接收请求、执行工作并返回响应的 Web 服务器。

    底线:首先考虑数据流,而不是处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-29
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多