Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีการใช้ฟังก์ชั่นรอเพื่อตรวจสอบว่ามีคีย์ไม่มีอยู่ในที่ฝากข้อมูล S3 ใน Boto3 หรือไม่


คำชี้แจงปัญหา − ใช้ไลบรารี boto3 ใน Python เพื่อตรวจสอบว่าไม่มีคีย์ในบัคเก็ตหรือไม่ โดยใช้ฟังก์ชันบริกร ตัวอย่างเช่น ใช้บริกรเพื่อตรวจสอบว่าไม่มีคีย์ test1.zip ใน Bucket_1 หรือไม่

แนวทาง/อัลกอริทึมในการแก้ปัญหานี้

ขั้นตอนที่ 1 - นำเข้าข้อยกเว้น boto3 และ botocore เพื่อจัดการกับข้อยกเว้น

ขั้นตอนที่ 2 − bucket_name และ key เป็นสองพารามิเตอร์ในฟังก์ชัน

ขั้นตอนที่ 3 − สร้างเซสชัน AWS โดยใช้ไลบรารี boto3

ขั้นตอนที่ 4 − สร้างไคลเอนต์ AWS สำหรับ S3

ขั้นตอนที่ 5 − ตอนนี้สร้างวัตถุรอสำหรับ object_not_exists โดยใช้ฟังก์ชัน get_waiter

ขั้นตอนที่ 6 − ตอนนี้ ใช้อ็อบเจกต์ wait เพื่อตรวจสอบว่าไม่มีคีย์ในบัคเก็ตที่ระบุหรือไม่ โดยค่าเริ่มต้น ระบบจะตรวจสอบทุกๆ 5 วินาทีจนกว่าจะถึงสถานะสำเร็จ ข้อผิดพลาดถูกส่งกลับหลังจาก 20 ตรวจสอบล้มเหลว อย่างไรก็ตาม ผู้ใช้สามารถกำหนดเวลาการสำรวจและความพยายามสูงสุดได้

ขั้นตอนที่ 7 − ส่งคืน None

ขั้นตอนที่ 8 − จัดการข้อยกเว้นทั่วไปหากมีข้อผิดพลาดขณะตรวจสอบที่ฝากข้อมูล

ตัวอย่าง

ใช้รหัสต่อไปนี้เพื่อใช้ waiter เพื่อตรวจสอบว่ามีกุญแจอยู่ในที่ฝากข้อมูลหรือไม่ -

import boto3
from botocore.exceptions import ClientError

def use_waiters_check_object_not_exists(bucket_name, key_name):
   session = boto3.session.Session()
   s3_client = session.client('s3')
   try:
      waiter = s3_client.get_waiter('object_not_exists')
      waiter.wait(Bucket=bucket_name, Key = key_name,
                  WaiterConfig={
                     'Delay': 2, 'MaxAttempts': 5})
      print('Object does not exist: ' + bucket_name +'/'+key_name)
   except ClientError as e:
      raise Exception( "boto3 client error in use_waiters_check_object_not_exists: " + e.__str__())
   except Exception as e:
      raise Exception( "Unexpected error in use_waiters_check_object_not_exists: " + e.__str__())

print(use_waiters_check_object_exists("Bucket_1","testfolder/test1.zip"))
print(use_waiters_check_object_exists("Bucket_1","testfolder/test.zip"))

ผลลัพธ์

Object does not exist: Bucket_1/testfolder/test1.zip
None

botocore.exceptions.WaiterError: Waiter ObjectNotExists failed: Max attempts exceeded
"Unexpected error in use_waiters_check_object_not_exists: " + e.__str__())
Exception: Unexpected error in use_waiters_check_object_not_exists:
Waiter ObjectNotExists failed: Max attempts exceed

สำหรับ Bucket_1/testfolder/test1.zip ผลลัพธ์คือคำสั่งพิมพ์และไม่มี เนื่องจากไม่มีการตอบกลับใดๆ จึงพิมพ์ว่าไม่มี

สำหรับ Bucket_1/testfolder/test.zip ผลลัพธ์จะเป็นข้อยกเว้นเนื่องจากมีอ็อบเจ็กต์นี้อยู่

ยกเว้น สามารถอ่านได้ว่าความพยายามสูงสุดเกิน