首页 > 解决方案 > 基于触发器并发运行python脚本

问题描述

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

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

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

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

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

任何建议表示赞赏。谢谢。

标签: pythonamazon-s3amazon-ec2aws-lambdaconcurrency

解决方案


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

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

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

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

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

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


推荐阅读