0

我在S3 Bucket中有20000个图像。我想使用AWS Lambda来调整它们的大小。为此,我在Lambda的tmp文件夹中下载图像,然后将其上载回S3使用线程调整AWS Lambda的图像大小

我想优化它,所以我实现了线程。当我使用15个线程时,我的代码工作正常,但是当我使用超过15-16个线程时,它创建了连接池已满等问题。我想提一下,我已经明确地关心等待已经运行的线程的终止。

如何优化代码?如果可以创建更多线程,那么在Lambda内创建线程的最佳方式是什么?

+2

您实施了线程...哪里?在从外部调用Lambda函数的代码中还是在Lambda函数本身中?如果是后者,我认为你并没有为提高效率而取得很多成就。如果前者,*什么*连接池已满?不相关的,确保你在处理后从'/ tmp'中删除你的文件,否则你会有另一个惊喜。 –

+0

我在lambda函数本身实现了线程。是的,我已经照顾清理/ tmp文件夹。有没有任何解决方法来改善这一点。 – rresol

+1

改进一下,究竟是什么? Lambda背后的一般理念是一个调用=一个任务。如果你的处理是CPU密集型的,那么你的运行时间几乎是线性的 - 在一次调用中在两个线程中处理两个文件将花费与在两个调用中的一个线程中每个处理一个文件相同量的实例时间...同时,将内存翻倍会使运行时间减少大约一半,因为每次调用可用的CPU周期与您分配的内存成正比。 (除此之外没有其他理由,他们就是这么设计的。) –

回答

2

调用一个lambda方法20K次传递文件名,它需要使用...不需要等待。每个lambda调用都会处理每个文件。你可以有20k线程。

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

+1

要小心......或在本月底账单会很高:) – UXDart

+0

我知道这一点,但我正在寻找更好的解决方案。 – rresol