gpt4 book ai didi

amazon-web-services - concurrent.futures.ThreadPoolExecutor 的使用总是在 aws lambda 中抛出超时异常

转载 作者:行者123 更新时间:2023-12-04 15:35:16 24 4
gpt4 key购买 nike

我在 aws lambda 中有以下代码来从 API 获取响应,直到状态完成。我使用了 concurrent.futures 中的 ThreadPoolExecutor

这是示例代码。

import requests
import json
import concurrent.futures

def copy_url(headers,data):
collectionStatus = 'INITIATED'
retries = 0
print(" The data to be copied is ",data)
while (collectionStatus != 'COMPLETED' or retries <= 50):
r = requests.post(
url=URL,
headers=headers,
data=json.dumps(data))
final_status= r.json().get('status').pop().get('status')
retries += 1
print(" The collection status is",final_status)


with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
future = executor.submit(copy_url,headers,data)
return_value = future.result()

我已经在 python 中使用常规线程实现了这个。但是,因为我想要从线程返回值,所以尝试实现它。虽然这在 pycharm 中完美运行,但它总是在 aws lambda 中抛出超时错误。

有人可以解释为什么这只发生在 aws-lambda 中吗?

注意:我已经尝试增加 lambda 超时值。这仅在实现 threadpoolexecutor 时发生。当我注释掉该代码时,它工作正常。它也适用于常规的 python 线程实现

最佳答案

最后,我将实现更改为监听 SQS 触发器,而不是等待来自 API 的响应(API 由不同的组件处理,响应将花费大量时间)

看起来我们应该避免在 aws lambda 中使用 python 并行处理任务。

来自 AWS docs :

The multiprocessing module that comes with Python lets you run multiple processes in parallel. Due to the Lambda execution environment not having /dev/shm (shared memory for processes) support, you can’t use multiprocessing.Queue or multiprocessing.Pool.

如果要使用multiprocessing,则只支持 PIPE。

关于amazon-web-services - concurrent.futures.ThreadPoolExecutor 的使用总是在 aws lambda 中抛出超时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59986146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com