gpt4 book ai didi

python - AWS Lambda 多线程和 boto3

转载 作者:太空宇宙 更新时间:2023-11-04 09:52:31 27 4
gpt4 key购买 nike

我正在编写一个 AWS Lambda 函数,它从 S3 存储桶中每次调用 lambda 函数删除 100,000 个对象。我正在尝试查看是否可以在后台线程上创建和运行删除操作。我有以下代码。

import boto3
import boto3.session
from threading import Thread

http_response = []
MAX = 999
threads = []

class myThread(Thread):
def __init__(self, objects_to_delete, bucket_name):
Thread.__init__(self)

self.objects_to_delete = objects_to_delete
self.bucket_name = bucket_name

def run(self):
session = boto3.session.Session().client('s3')
s3 = session.client('s3')

####
COMES HERE AND PRINTS THE NAME OF THE BUCKET.
####
print(self.bucket_name)

response = s3.delete_objects(Bucket=bucket_name, Delete={'Objects': objects_to_delete[0:MAX] })

####
THIS IS NOT GETTING PRINTED. MEANING, delete_object IS BREAKING/NOT EXECUTING
####
print(response)


def handler(event, context):

keys = event['keys']
bucket_name = event["bucket"]

if (len(keys) == 0 or len(bucket_name) == 0):
return {
"message": http_response
}

try:
t = myThread(objects_to_delete[0:MAX], bucket_name)
t.start()
threads.append(t)

except:
print("Something Went wrong!!! " + str(objects_to_delete))


del keys[0:MAX]

for i in range(len(threads)):
threads[i].start()


handler({'keys': keys, 'bucket': bucket_name}, context)

我在这里做错了什么吗?似乎线程正在启​​动,但它没有进行“delete_objects”调用。它甚至不返回任何错误消息来了解错误。有什么想法或想法吗?

还有一点,当我在我的计算机上本地运行这个函数时,它运行得很好,没有任何问题。

最佳答案

在启动一个线程后,你应该加入它们,因为一旦进程退出,线程也会死亡。所以我做了以下

import boto3
from threading import Thread

MAX = 999
threads = []

class myThread(Thread):
def __init__(self, bucket_name, objects):
Thread.__init__(self)
self.bucket_name = bucket_name
self.objects = objects

def run(self):
s3 = boto3.client('s3', region_name="us-east-1")
response = s3.delete_objects(Bucket=self.bucket_name, Delete={'Objects':self.objects})
print(response)


def handler(event, context):

keys = event["keys"]
bucket_name = event["bucket"]

objects_to_delete = [1...100,000]

while (len(objects_to_delete) != 0):
t = myThread(bucket_name, objects_to_delete[0:MAX])
threads.append(t)
del objects_to_delete[0:MAX]


for thread in threads:
thread.start()

for thread in threads:
thread.join()

return {
"message": "Success Message."
}

关于python - AWS Lambda 多线程和 boto3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47214812/

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