เมื่อผู้ใช้ต้องการใช้ฟังก์ชัน wait เพื่อตรวจสอบว่ามีคีย์ในบัคเก็ตอยู่หรือไม่ในโค้ดโปรแกรม
คำชี้แจงปัญหา − ใช้ไลบรารี boto3 ใน Python เพื่อตรวจสอบว่ามีคีย์อยู่ในบัคเก็ตหรือไม่ โดยใช้ฟังก์ชันบริกร ตัวอย่างเช่น ใช้บริกรเพื่อตรวจสอบว่ามีคีย์ test.zip อยู่ใน Bucket_1 หรือไม่
แนวทาง/อัลกอริทึมในการแก้ปัญหานี้
ขั้นตอนที่ 1 - นำเข้าข้อยกเว้น boto3 และ botocore เพื่อจัดการกับข้อยกเว้น
ขั้นตอนที่ 2 − bucket_name และ key เป็นสองพารามิเตอร์ในฟังก์ชัน
ขั้นตอนที่ 3 − สร้างเซสชัน AWS โดยใช้ไลบรารี boto3
ขั้นตอนที่ 4 − สร้างไคลเอนต์ AWS สำหรับ S3
ขั้นตอนที่ 5 − ตอนนี้สร้างวัตถุรอสำหรับ object_exists โดยใช้ฟังก์ชัน get_waiter
ขั้นตอนที่ 6 − ตอนนี้ ใช้ รอ ออบเจ็กต์เพื่อตรวจสอบว่าคีย์มีอยู่ในบัคเก็ตที่กำหนดหรือไม่ โดยค่าเริ่มต้น ระบบจะตรวจสอบทุกๆ 5 วินาทีจนกว่าจะถึงสถานะสำเร็จ ข้อผิดพลาดถูกส่งกลับหลังจาก 20 ตรวจสอบล้มเหลว อย่างไรก็ตาม ผู้ใช้สามารถกำหนดเวลาการสำรวจและความพยายามสูงสุดได้
ขั้นตอนที่ 7 − ส่งคืน None
ขั้นตอนที่ 8 − จัดการข้อยกเว้นทั่วไปหากมีข้อผิดพลาดขณะตรวจสอบที่ฝากข้อมูล
ตัวอย่าง
ใช้รหัสต่อไปนี้เพื่อใช้ บริกร เพื่อตรวจสอบว่ามีคีย์อยู่ในบัคเก็ตหรือไม่ -
import boto3 from botocore.exceptions import ClientError def use_waiters_check_object_exists(bucket_name, key_name): session = boto3.session.Session() s3_client = session.client('s3') try: waiter = s3_client.get_waiter('object_exists') waiter.wait(Bucket=bucket_name, Key = key_name, WaiterConfig={ 'Delay': 2, 'MaxAttempts': 5}) print('Object exists: ' + bucket_name +'/'+key_name) except ClientError as e: raise Exception( "boto3 client error in use_waiters_check_object_exists: " + e.__str__()) except Exception as e: raise Exception( "Unexpected error in use_waiters_check_object_exists: " + e.__str__()) print(use_waiters_check_object_exists("Bucket_1","testfolder/test.zip")) print(use_waiters_check_object_exists("Bucket_1","testfolder/test1.zip") )
ผลลัพธ์
Object exists: Bucket_1/testfolder/test.zip None botocore.exceptions.WaiterError: Waiter ObjectExists failed: Max attempts exceeded "Unexpected error in use_waiters_check_object_exists: " + e.__str__()) Exception: Unexpected error in use_waiters_check_object_exists: Waiter ObjectExists failed: Max attempts exceed
สำหรับ Bucket_1/testfolder/test.zip ผลลัพธ์คือคำสั่งพิมพ์และไม่มี เนื่องจากไม่มีการตอบกลับใดๆ จึงพิมพ์ว่าไม่มี
สำหรับ Bucket_1/testfolder/test1.zip ผลลัพธ์จะเป็นข้อยกเว้น เนื่องจากไม่มีวัตถุนี้
ยกเว้น สามารถอ่านได้ว่าความพยายามสูงสุดเกิน