การประมวลผลหลายตัวเป็นเทคนิคยอดนิยมในการเขียนโปรแกรม Python ที่ช่วยให้คุณสามารถรันหลายกระบวนการพร้อมกัน ซึ่งมักจะส่งผลให้ประสิทธิภาพดีขึ้นและการใช้ทรัพยากรระบบมีประสิทธิภาพมากขึ้น บทความนี้จะเจาะลึกถึงการใช้งานของ มัลติโปรเซสเซอร์ ไลบรารี่ใน Python โดยเน้นที่ไฟล์ แผนที่ การทำงาน. ฟังก์ชัน map ช่วยให้คุณสามารถใช้ฟังก์ชันกับแต่ละรายการในแบบวนซ้ำได้ เช่น รายการ และส่งคืนรายการใหม่พร้อมกับผลลัพธ์ ด้วยการใช้ประโยชน์จากการประมวลผลหลายตัว เราสามารถเทียบเคียงกระบวนการนี้เพื่อประสิทธิภาพและความสามารถในการปรับขนาดที่มากขึ้น
ในบทความนี้ เราจะสำรวจปัญหาที่การประมวลผลหลายตัวด้วยฟังก์ชัน Map อาจเป็นวิธีแก้ปัญหาที่ยอดเยี่ยม หารือเกี่ยวกับไลบรารีและฟังก์ชันที่เกี่ยวข้อง ให้คำอธิบายโค้ดทีละขั้นตอน และเจาะลึกหัวข้อที่เกี่ยวข้องซึ่งสร้างขึ้นบนแกนหลัก ของการประมวลผลหลายตัวและฟังก์ชันแผนที่
แผนที่การประมวลผลหลายตัว: ปัญหาและแนวทางแก้ไข
ปัญหาที่เรามุ่งหวังที่จะแก้ไขคือการปรับปรุงประสิทธิภาพและประสิทธิภาพของการใช้ฟังก์ชันกับแต่ละรายการในการวนซ้ำจำนวนมาก เช่น รายการ ทูเพิล หรืออ็อบเจ็กต์อื่น ๆ ที่รองรับการวนซ้ำ เมื่อต้องเผชิญกับงานดังกล่าว การใช้ฟังก์ชันแผนที่ในตัวหรือรายการความเข้าใจอาจค่อนข้างช้าและไม่มีประสิทธิภาพ
วิธีแก้ไขคือใช้ไลบรารีมัลติโพรเซสซิงใน Python โดยเฉพาะ สระ คลาสและของมัน แผนที่ วิธี. โดยใช้ ฟังก์ชัน Multiprocessing Pool.map()เราสามารถกระจายการดำเนินการของฟังก์ชันของเราไปยังกระบวนการต่างๆ ได้
คำอธิบายทีละขั้นตอนของรหัส
มาแจกแจงโค้ดและแสดงวิธีใช้ฟังก์ชันแผนที่แบบหลายโปรเซสเซอร์อย่างมีประสิทธิภาพ:
import multiprocessing import time def square(n): time.sleep(0.5) return n * n # Create the list of numbers numbers = list(range(10)) # Initialize the multiprocessing Pool pool = multiprocessing.Pool() # Use the map function with multiple processes squared_numbers = pool.map(square, numbers) print(squared_numbers)
- ขั้นแรกให้นำเข้า มัลติโปรเซสเซอร์ โมดูลซึ่งประกอบด้วยเครื่องมือที่จำเป็นในการใช้การประมวลผลแบบขนานใน Python
- สร้างฟังก์ชั่นที่เรียกว่า สี่เหลี่ยม ที่เพียงแค่พักครึ่งวินาทีแล้วส่งคืนกำลังสองของอาร์กิวเมนต์อินพุต ฟังก์ชันนี้จำลองการคำนวณที่ใช้เวลาพอสมควรจึงจะเสร็จสมบูรณ์
- สร้างรายการที่เรียกว่า ตัวเลขซึ่งมีจำนวนเต็มตั้งแต่ 0 ถึง 9 (รวม)
- เริ่มต้นไฟล์ สระ วัตถุจากโมดูลมัลติโปรเซสเซอร์ วัตถุพูลทำหน้าที่เป็นวิธีในการจัดการกระบวนการของผู้ปฏิบัติงานที่คุณจะใช้เพื่อขนานงานของคุณ
- โทร แผนที่ วิธีการบนวัตถุพูลและส่งผ่านใน สี่เหลี่ยม ฟังก์ชันและ ตัวเลข รายการ. จากนั้นวิธีการ map จะใช้ฟังก์ชัน square กับแต่ละรายการในรายการตัวเลขพร้อมกัน โดยใช้กระบวนการของผู้ปฏิบัติงานที่มีอยู่ในพูล
- พิมพ์รายการผลลัพธ์ของ squared_numbers ซึ่งควรมีค่ากำลังสองจากรายการตัวเลข
ไลบรารีมัลติโปรเซสเซอร์ Python
Python มัลติโปรเซสเซอร์ ไลบรารี่จัดเตรียมวิธีการที่ใช้งานง่ายในการนำความขนานไปใช้ในโปรแกรมของคุณ มันปกปิดความซับซ้อนบางส่วนที่มักเกี่ยวข้องกับการเขียนโปรแกรมแบบขนานโดยนำเสนอนามธรรมระดับสูงเช่น สระ. คลาส Pool ช่วยลดความยุ่งยากในการกระจายงานในหลายกระบวนการ ทำให้ผู้ใช้สามารถสัมผัสถึงประโยชน์ของการประมวลผลแบบขนานโดยมีความยุ่งยากน้อยที่สุด
โมดูล Python Itertools และฟังก์ชันที่เกี่ยวข้อง
แม้ว่าการประมวลผลหลายตัวจะเป็นโซลูชันที่ยอดเยี่ยมสำหรับงานหลายงานแบบขนาน แต่ก็คุ้มค่าที่จะกล่าวถึงว่า Python ยังมีไลบรารีและเครื่องมืออื่นๆ ที่ตอบสนองความต้องการที่คล้ายกันอีกด้วย ตัวอย่างเช่น โมดูล itertools นำเสนอฟังก์ชันมากมายที่ทำงานบนความสามารถในการทำซ้ำได้ ซึ่งมักจะมีประสิทธิภาพที่ดีขึ้น itertools บางตัวทำงานเหมือน ไอแมป() และ imap_unordered() สามารถขนานกระบวนการของการใช้ฟังก์ชันกับ iterable ได้ อย่างไรก็ตาม สิ่งสำคัญที่ควรทราบคือ itertools มุ่งเน้นไปที่โซลูชันที่ใช้ตัววนซ้ำเป็นหลัก ในขณะที่ไลบรารีการประมวลผลหลายตัวเสนอแนวทางที่ครอบคลุมมากขึ้นสำหรับการทำงานแบบขนาน โดยมอบเครื่องมือและความสามารถเพิ่มเติมนอกเหนือจากฟังก์ชันที่เหมือนแผนที่