เฮ้! ฉันเป็นซัพพลายเออร์ของ Pillow และวันนี้ฉันจะแบ่งปันเคล็ดลับบางประการเกี่ยวกับวิธีใช้ Pillow ในสภาพแวดล้อมที่มีหลายกระบวนการ
ก่อนอื่น มาทำความเข้าใจว่าทำไมเราถึงต้องการใช้ Pillow ในการตั้งค่าแบบหลายกระบวนการ Pillow เป็นไลบรารี Python ที่ยอดเยี่ยมสำหรับการประมวลผลภาพ แต่เมื่อคุณจัดการกับภาพจำนวนมากหรืองานประมวลผลภาพที่ซับซ้อน วิธีการแบบกระบวนการเดียวอาจทำได้ช้ามาก นั่นคือที่มาของการประมวลผลแบบหลายตัว ช่วยให้คุณสามารถแบ่งงานออกเป็นแกน CPU หลายตัว ซึ่งช่วยเร่งเวลาการประมวลผลโดยรวมให้เร็วขึ้น
ข้อกำหนดเบื้องต้น
ก่อนที่เราจะเจาะลึกรายละเอียด ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Pillow แล้ว คุณสามารถติดตั้งได้โดยใช้ pip:
pip ติดตั้งหมอน
นอกจากนี้คุณต้องมีความเข้าใจพื้นฐานเกี่ยวกับ Python ด้วยการประมวลผลหลายตัวโมดูล โมดูลนี้มีวิธีง่ายๆ ในการรันกระบวนการต่างๆ ใน Python
การตั้งค่าพื้นฐาน
เริ่มต้นด้วยตัวอย่างง่ายๆ สมมติว่าคุณมีรูปภาพจำนวนมากในไดเร็กทอรี และคุณต้องการปรับขนาดรูปภาพทั้งหมด ต่อไปนี้คือวิธีที่คุณสามารถทำได้โดยใช้การประมวลผลหลายรูปแบบและ Pillow
นำเข้าระบบปฏิบัติการจาก PIL นำเข้ารูปภาพ นำเข้าหลายการประมวลผล def resize_image(image_path): ลอง: ด้วย Image.open(image_path) เป็น img: new_size = (img.width // 2, img.height // 2) resize_img = img.resize(new_size) output_path = os.path.join('resize', os.path.basename(image_path)) resize_img.save(output_path) ยกเว้นข้อยกเว้นเป็น e: print(f"ข้อผิดพลาดในการประมวลผล {image_path}: {e}") ถ้า __name__ == '__main__': image_dir = 'images' image_files = [os.path.join(image_dir, f) for f in os.listdir(image_dir) if f.endswith(('.png', '.jpg', '.jpeg'))] ถ้าไม่ใช่ os.path.exists('resize'): os.makedirs('resize') pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) pool.map(resize_image, image_files) pool.close() pool.join() print("รูปภาพทั้งหมดปรับขนาดสำเร็จ")
ในโค้ดนี้ เราจะกำหนดฟังก์ชันก่อนปรับขนาด_รูปภาพที่ใช้เส้นทางรูปภาพ เปิดรูปภาพโดยใช้ Pillow ปรับขนาด และบันทึกรูปภาพที่ปรับขนาดแล้วในไดเร็กทอรีใหม่ จากนั้นในถ้า __name__ == '__main__'block เราจะได้รายชื่อไฟล์รูปภาพทั้งหมดที่อยู่ในภาพไดเรกทอรี เราสร้างไดเรกทอรีใหม่ที่เรียกว่าปรับขนาดเพื่อจัดเก็บภาพที่ปรับขนาดแล้ว
จากนั้นเราก็สร้างมัลติโพรเซสซิงพูลวัตถุที่มีจำนวนกระบวนการเท่ากับจำนวนแกน CPU ที่มีอยู่ ที่พูล.แผนที่ฟังก์ชั่นใช้ปรับขนาด_รูปภาพให้กับไฟล์ภาพแต่ละไฟล์ในรายการ ในที่สุดเราก็ปิดพูลและรอให้กระบวนการทั้งหมดใช้งานเสร็จสิ้นสระว่ายน้ำ.ปิด()และพูล.เข้าร่วม()-
การแบ่งปันทรัพยากร
หนึ่งในความท้าทายในสภาพแวดล้อมแบบหลายกระบวนการคือการแบ่งปันทรัพยากร เช่น หากคุณต้องการใช้หมอนใบเดียวภาพคัดค้านในหลายกระบวนการ คุณต้องใช้ความระมัดระวัง
หลามการประมวลผลหลายตัวโมดูลมีวิธีการแบ่งปันข้อมูลระหว่างกระบวนการที่แตกต่างกัน วิธีหนึ่งที่พบบ่อยคือการใช้หน่วยความจำที่ใช้ร่วมกัน อย่างไรก็ตาม เมื่อพูดถึงรูปภาพ Pillow โดยปกติแล้วจะดีกว่าถ้าส่งเส้นทางรูปภาพระหว่างกระบวนการ และเปิดรูปภาพแยกกันในแต่ละกระบวนการ เนื่องจากรูปภาพเสริมไม่สามารถทำให้เป็นอนุกรมได้ง่าย ซึ่งหมายความว่าไม่สามารถแชร์ระหว่างกระบวนการต่างๆ ได้อย่างง่ายดาย
การจัดการข้อผิดพลาด
เมื่อทำงานในสภาพแวดล้อมที่มีหลายกระบวนการ การจัดการข้อผิดพลาดจะมีความสำคัญมากยิ่งขึ้น หากกระบวนการหนึ่งล้มเหลว ก็ไม่ควรทำให้การดำเนินการทั้งหมดล่มลง ในตัวอย่างข้างต้น เราได้เพิ่ม try - ยกเว้นบล็อกในปรับขนาด_รูปภาพฟังก์ชั่นตรวจจับข้อยกเว้นใด ๆ ที่อาจเกิดขึ้นระหว่างการประมวลผลภาพ


การพิจารณาประสิทธิภาพ
แม้ว่าการประมวลผลหลายตัวจะช่วยเพิ่มความเร็วในการประมวลผลภาพได้อย่างมาก แต่ก็ไม่ใช่วิธีแก้ปัญหาที่ดีที่สุดเสมอไป มีค่าใช้จ่ายที่เกี่ยวข้องกับการสร้างและการจัดการกระบวนการต่างๆ ดังนั้น หากคุณกำลังจัดการกับรูปภาพจำนวนเล็กน้อยหรืองานง่ายๆ แนวทางแบบกระบวนการเดียวอาจเร็วกว่า
นอกจากนี้ ตรวจสอบให้แน่ใจว่าคุณไม่โอเวอร์โหลดระบบของคุณด้วยการสร้างกระบวนการมากเกินไป ในตัวอย่างข้างต้น เราใช้การประมวลผลหลายตัว cpu_count()เพื่อกำหนดจำนวนกระบวนการ นี่เป็นจุดเริ่มต้นที่ดี แต่คุณอาจต้องปรับเปลี่ยนตามความต้องการของระบบและงานเฉพาะของคุณ
กรณีการใช้งานในธุรกิจของเรา
ในฐานะซัพพลายเออร์หมอน เราใช้การประมวลผลภาพแบบหลายกระบวนการในหลายวิธี เช่น เมื่อเราได้รับคำสั่งซื้อจำนวนมากปลอกหมอนเราจำเป็นต้องประมวลผลภาพผลิตภัณฑ์สำหรับเว็บไซต์ของเรา เราใช้การประมวลผลหลายตัวเพื่อปรับขนาด ครอบตัด และเพิ่มลายน้ำให้กับรูปภาพเหล่านี้อย่างรวดเร็ว
กรณีการใช้งานอีกประการหนึ่งคือเมื่อเรากำลังพัฒนาผลิตภัณฑ์ใหม่หมอนการออกแบบ เราอาจจำเป็นต้องสร้างการออกแบบเดียวกันหลายรูปแบบ และการประมวลผลแบบหลายตัวช่วยให้เราดำเนินการนี้ได้ทันเวลา
นอกจากนี้เรายังใช้การประมวลผลแบบมัลติเพื่อการควบคุมคุณภาพ เราสามารถประมวลผลภาพของผลิตภัณฑ์สำเร็จรูปเพื่อตรวจสอบข้อบกพร่องได้ เช่น เราสามารถใช้ Pillow เพื่อตรวจดูว่าการเย็บบนปลอกหมอนเป็นเส้นตรงหรือมีรอยเปื้อนบนหมอนหรือไม่
บทสรุป
การใช้ Pillow ในสภาพแวดล้อมแบบหลายกระบวนการอาจเป็นวิธีที่มีประสิทธิภาพในการเร่งงานการประมวลผลภาพ ด้วยการแบ่งงานออกเป็นแกน CPU หลายตัว คุณสามารถจัดการภาพปริมาณมากได้อย่างมีประสิทธิภาพมากขึ้น อย่างไรก็ตาม การพิจารณาค่าใช้จ่ายของการประมวลผลหลายรายการและจัดการกับข้อผิดพลาดอย่างเหมาะสมเป็นสิ่งสำคัญ
หากคุณอยู่ในตลาดสินค้าคุณภาพสูงหมอนหรือต้องการความช่วยเหลือในการประมวลผลภาพสำหรับธุรกิจของคุณ อย่าลังเลที่จะติดต่อเรา เราพร้อมช่วยเหลือคุณในทุกความต้องการที่เกี่ยวข้องกับหมอน และสามารถมอบโซลูชั่นที่ดีที่สุดสำหรับความต้องการในการประมวลผลภาพของคุณ ไม่ว่าคุณจะเป็นธุรกิจขนาดเล็กหรือองค์กรขนาดใหญ่ เรามีความเชี่ยวชาญและทรัพยากรที่จะตอบสนองความต้องการของคุณ
อ้างอิง
- เอกสารประกอบการประมวลผลหลายตัวของ Python
- เอกสารอย่างเป็นทางการของหมอน
นั่นคือทั้งหมดสำหรับบล็อกของวันนี้ ฉันหวังว่าคุณจะพบว่ามันมีประโยชน์ หากคุณมีคำถามหรือความคิดเห็นใด ๆ โปรดทิ้งไว้ด้านล่าง
