Multithreading 使用线程调整AWS Lambda图像大小

Multithreading 使用线程调整AWS Lambda图像大小,multithreading,python-3.x,amazon-web-services,amazon-s3,lambda,Multithreading,Python 3.x,Amazon Web Services,Amazon S3,Lambda,我在S3桶里有20000张图片。我想使用调整它们的大小。为此,我将图像下载到Lambda的tmp文件夹中,然后将其上传回 我想优化它,所以我在其中实现了线程。当我使用15个线程时,我的代码工作正常,但当我使用超过15-16个线程时,就会产生连接池已满等问题。我想提到的是,我已经明确地处理了等待已经运行的线程终止的问题 我可以做些什么来优化代码?如果可以创建更多线程,那么在Lambda中创建线程的最佳方法是什么?调用Lambda方法20k次,传递需要使用的文件名。。。不需要等待。每个lambda调

我在S3桶里有20000张图片。我想使用调整它们的大小。为此,我将图像下载到Lambda的
tmp
文件夹中,然后将其上传回

我想优化它,所以我在其中实现了线程。当我使用15个线程时,我的代码工作正常,但当我使用超过15-16个线程时,就会产生连接池已满等问题。我想提到的是,我已经明确地处理了等待已经运行的线程终止的问题


我可以做些什么来优化代码?如果可以创建更多线程,那么在Lambda中创建线程的最佳方法是什么?

调用Lambda方法20k次,传递需要使用的文件名。。。不需要等待。每个lambda调用将处理每个文件。这样可以有20k个线程


您可以创建一个规则,因此当S3中有一个新文件时,将调用lambda方法。但是第一批需要手动处理。

调用lambda方法20k次,传递需要处理的文件名。。。不需要等待。每个lambda调用将处理每个文件。这样可以有20k个线程


您可以创建一个规则,因此当S3中有一个新文件时,将调用lambda方法。但是第一批需要人工处理。

小心。。。或者月底账单会很高:)我知道这一点,但我正在寻找更好的解决方案。小心。。。或者月底账单会很高:)我知道这一点,但我正在寻找更好的解决方案。你实施了线程化。。。哪里在外部调用Lambda函数的代码中,还是在Lambda函数本身中?如果是后者,我认为你在效率方面没有取得多大成就。如果是前者,什么连接池已满?不相关,请确保在处理后从
/tmp
中删除文件,否则会有另一个惊喜。我在lambda函数本身中实现了线程。是的,我已经清理了/tmp文件夹。有什么办法可以改进吗?具体改进什么?Lambda背后的基本思想是一次调用=一个任务。如果您的处理是CPU密集型的,那么您的运行时将几乎是线性的——在一次调用中在两个线程中处理两个文件所需的实例时间与在两次调用中在一个线程中分别处理一个文件所需的实例时间大致相同。。。同时,加倍内存将使运行时间减少大约一半,因为每次调用的可用CPU周期与分配的内存成正比。(除此之外没有其他原因,他们就是这样设计的。)我想改进整个处理过程所需的时间。所以你的意思是说,我应该每次调用lambda函数,而不是使用线程,我的意思是,对于每个图像,我应该有一个不同的lambda函数。如果我错了,请纠正我。是的,这就是我的想法。每个并发调用都在一个独立的容器中运行,您可以随时在帐户中运行多达1000个容器,而无需任何预配置——Lambda将根据需求继续启动它们。如果在最近使用的空闲容器仍处于活动状态时调用该函数,它通常会从处理程序开始(这就是清理
/tmp
非常重要的原因)。否则,容器将在几分钟内被销毁。但你只在他们实际运行调用时才付钱。你实现了线程。。。哪里在外部调用Lambda函数的代码中,还是在Lambda函数本身中?如果是后者,我认为你在效率方面没有取得多大成就。如果是前者,什么连接池已满?不相关,请确保在处理后从
/tmp
中删除文件,否则会有另一个惊喜。我在lambda函数本身中实现了线程。是的,我已经清理了/tmp文件夹。有什么办法可以改进吗?具体改进什么?Lambda背后的基本思想是一次调用=一个任务。如果您的处理是CPU密集型的,那么您的运行时将几乎是线性的——在一次调用中在两个线程中处理两个文件所需的实例时间与在两次调用中在一个线程中分别处理一个文件所需的实例时间大致相同。。。同时,加倍内存将使运行时间减少大约一半,因为每次调用的可用CPU周期与分配的内存成正比。(除此之外没有其他原因,他们就是这样设计的。)我想改进整个处理过程所需的时间。所以你的意思是说,我应该每次调用lambda函数,而不是使用线程,我的意思是,对于每个图像,我应该有一个不同的lambda函数。如果我错了,请纠正我。是的,这就是我的想法。每个并发调用都在一个独立的容器中运行,您可以随时在帐户中运行多达1000个容器,而无需任何预配置——Lambda将根据需求继续启动它们。如果在最近使用的空闲容器仍处于活动状态时调用该函数,它通常会从处理程序开始(这就是清理
/tmp
非常重要的原因)。否则,容器将在几分钟内被销毁。但你只在他们实际运行调用时才付钱。