Nat*_*ate 5 python multithreading amazon-web-services amazon-dynamodb aws-lambda
我有一个 Python 中的 AWS Lambda 函数,它从 S3 读取非规范化记录文件,正确格式化其内容,然后通过批量写入将其上传到 DynamoDB。一切都像广告上说的那样。然后,我尝试将此管道的上传部分分解为线程,希望更有效地利用 DynamoDB 写入能力。然而,多线程版本慢了大约 50%。由于代码很长,我包含了伪代码。
NUM_THREADS = 4
for every line in the file:
Add line to list of lines
if we've read enough lines for a single thread:
Create thread that uploads list of lines
thread.start()
clear list of lines.
for every thread started:
thread.join()
Run Code Online (Sandbox Code Playgroud)
我再次知道这个问题非常理论化,因此可能很难看出问题的根源,但是是否有一些我不知道的 Lambda 怪癖?我还可以尝试其他方法来帮助诊断问题吗?任何帮助表示赞赏。
Nate,您是否完全排除了 Dynamodb 端的问题?写请求总数可能相同,但对于多线程,每秒的数量会不同。
控制台有一些有用的图表来显示您的写入(或批量写入)是否受到限制。如果您的 Lambda 函数中没有正确的“后退,重试”逻辑,Lambda 将不断尝试,您的问题会变得更糟。
另一件事,这对你来说可能是显而易见的(但对我来说不是!)。我的印象是,batch_writes 在容量规划方面为您节省了资金。(例如,以 20 为一组的批次进行 200 次写入只会花费 10 个写入单元。我可以发誓我听到 AWS 人员在演示中提到了这一点,但这不是重点。)
事实上,batch_writes 为您节省了一些时间,但在经济上没有任何意义。
最后一个想法:我敢打赌 Lambda 处理时间比提高 Dynamodb 写入容量更便宜。如果您并不特别急于完成 Lambda,为什么不让它在单线程上运行呢?
祝你好运!
| 归档时间: |
|
| 查看次数: |
2162 次 |
| 最近记录: |