Python คิวการประมวลผลหลายตัว

Python Khiw Kar Pramwl Phl Hlay Taw



องค์ประกอบที่สำคัญที่สุดของโครงสร้างข้อมูลคือคิว คิวโครงสร้างข้อมูล 'เข้าก่อนออกก่อน' ซึ่งเป็นพื้นฐานสำหรับการประมวลผลหลายตัวของ Python นั้นเปรียบได้ มีการจัดเตรียมคิวให้กับฟังก์ชันการประมวลผลเพื่ออนุญาตให้กระบวนการรวบรวมข้อมูล ข้อมูลรายการแรกที่จะตัดออกจากคิวคือรายการแรกที่ป้อน เราใช้วิธี 'put()' ของคิวเพื่อเพิ่มข้อมูลลงในคิวและใช้วิธี 'get()' เพื่อดึงข้อมูลจากคิว

ตัวอย่างที่ 1: การใช้เมธอด Queue() เพื่อสร้างคิวการประมวลผลหลายตัวใน Python

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







เครื่องมือ 'spyder' ใช้เพื่อใช้งานสคริปต์ Python ที่มีอยู่ ดังนั้นมาเริ่มกันเลย ก่อนอื่นเราต้องนำเข้าโมดูลการประมวลผลหลายตัวเนื่องจากเรากำลังเรียกใช้สคริปต์การประมวลผลหลายตัวของ Python เราทำได้โดยนำเข้าโมดูลการประมวลผลหลายตัวเป็น 'm' การใช้เทคนิค “m.queue()” เราเรียกใช้เมธอด “queue()” แบบมัลติโพรเซสซิง ที่นี่ เราสร้างตัวแปรชื่อ 'queue' และวางเมธอด 'queue()' การประมวลผลหลายตัวไว้ในนั้น ดังที่เราทราบว่าคิวจัดเก็บรายการตามลำดับ 'เข้าก่อนออกก่อน' รายการที่เราเพิ่มก่อนจะถูกลบออกก่อน หลังจากเรียกใช้คิวการประมวลผลหลายตัว เราจะเรียกเมธอด “print()” โดยส่งคำสั่ง “มีคิวการประมวลผลหลายตัว” เป็นอาร์กิวเมนต์เพื่อแสดงคิวนั้นบนหน้าจอ จากนั้น เนื่องจากเราเก็บคิวที่สร้างขึ้นไว้ในตัวแปรนี้ เราจึงพิมพ์คิวโดยส่งตัวแปร 'คิว' ในวงเล็บของเมธอด 'print()'




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







ตัวอย่างที่ 2: การใช้เมธอด “Qsize()” เพื่อกำหนดขนาดของคิวการประมวลผลหลายตัวใน Python

เราจะกำหนดขนาดของคิวการประมวลผลหลายรายการในกรณีนี้ ในการคำนวณขนาดของคิวการประมวลผลหลายรายการ เราใช้เมธอด “qsize()” ฟังก์ชัน “qsize()” ส่งคืนขนาดจริงของคิวการประมวลผลหลายตัวของ Python กล่าวอีกนัยหนึ่ง วิธีนี้แสดงจำนวนรายการทั้งหมดในคิว

เริ่มต้นด้วยการนำเข้าโมดูลการประมวลผลหลายตัวของ Python เป็น 'm' ก่อนรันโค้ด จากนั้นใช้คำสั่ง “m.queue()” เพื่อเรียกใช้งานฟังก์ชัน “queue()” แบบมัลติโพรเซสซิ่งและใส่ผลลัพธ์ลงในตัวแปร “Queue” จากนั้นใช้เมธอด “put()” เราเพิ่มรายการในคิวในบรรทัดต่อไปนี้ วิธีนี้ใช้เพื่อเพิ่มข้อมูลลงในคิว ดังนั้นเราจึงเรียก 'คิว' ด้วยเมธอด 'put()' และระบุจำนวนเต็มเป็นองค์ประกอบในวงเล็บ จำนวนที่เราเพิ่มคือ “1”, “2”, “3”, “4”, “5”, “6,” และ “7” โดยใช้ฟังก์ชัน “put()”



นอกจากนี้ การใช้ 'คิว' เพื่อรับขนาดของคิวการประมวลผลหลายตัว เราเรียก 'qsize()' ด้วยคิวการประมวลผลหลายตัว จากนั้นในตัวแปร 'ผลลัพธ์' ที่สร้างขึ้นใหม่ เราจะบันทึกผลลัพธ์ของเมธอด 'qsize()' หลังจากนั้น เราเรียกเมธอด “print()” และส่งคำสั่ง “The multiprocessing Queue’s size is” เป็นพารามิเตอร์ ต่อไป เราเรียกตัวแปร “ผลลัพธ์” ในฟังก์ชัน “พิมพ์()” เนื่องจากขนาดถูกบันทึกไว้ในตัวแปรนี้


ภาพที่ส่งออกมีขนาดที่แสดง ขณะที่เราใช้ฟังก์ชัน “put()” เพื่อเพิ่มองค์ประกอบเจ็ดรายการในคิวการประมวลผลหลายตัวและฟังก์ชัน “qsize()” เพื่อกำหนดขนาด ขนาดคิวการประมวลผลหลายตัวจะแสดงเป็น “7” ข้อความอินพุต 'ขนาดของคิวการประมวลผลหลายรายการ' จะแสดงก่อนขนาด

ตัวอย่างที่ 3: การใช้เมธอด “Put()” และ “Get()” ใน Python Multiprocessing Queue

ตัวอย่างนี้ใช้เมธอดคิว “put()” และ “get()” จากคิวการประมวลผลหลายตัวของ Python เราพัฒนาฟังก์ชันที่กำหนดโดยผู้ใช้สองฟังก์ชันในตัวอย่างนี้ ในตัวอย่างนี้ เรากำหนดฟังก์ชันเพื่อสร้างกระบวนการที่สร้างจำนวนเต็มแบบสุ่ม “5” นอกจากนี้เรายังใช้วิธี 'ใส่ ()' เพื่อเพิ่มลงในคิว เมธอด “put()” ใช้เพื่อวางรายการลงในคิว จากนั้น ในการดึงตัวเลขจากคิวและส่งคืนค่าของพวกมัน เราเขียนฟังก์ชันอื่นและเรียกมันระหว่างขั้นตอน เราใช้ฟังก์ชัน “get()” เพื่อดึงตัวเลขจากคิว เนื่องจากเมธอดนี้ใช้เพื่อดึงข้อมูลจากคิวที่เราแทรกด้วยเมธอด “put()”

เรามาเริ่มใช้โค้ดกันเลย ขั้นแรก เรานำเข้าไลบรารีทั้งสี่ที่ประกอบเป็นสคริปต์นี้ ก่อนอื่น เรานำเข้า 'sleep' จากโมดูลเวลาเพื่อหน่วงเวลาการดำเนินการสำหรับบางเวลาโดยวัดเป็นวินาที ตามด้วย 'สุ่ม' จากโมดูลสุ่มซึ่งใช้เพื่อสร้างตัวเลขสุ่ม จากนั้นจึง 'ประมวลผล' จากการประมวลผลหลายตัว เนื่องจากรหัสนี้สร้างกระบวนการ และสุดท้ายคือ 'คิว' จากการประมวลผลหลายตัว เมื่อเริ่มสร้างอินสแตนซ์ของคลาส คิวจะสามารถใช้ได้ ตามค่าเริ่มต้น สิ่งนี้จะสร้างคิวที่ไม่มีที่สิ้นสุดหรือคิวที่ไม่มีขนาดสูงสุด ด้วยการตั้งค่าตัวเลือกขนาดสูงสุดเป็นตัวเลขที่มากกว่าศูนย์ จึงสามารถสร้างผลงานที่มีข้อจำกัดด้านขนาดได้


เรากำหนดฟังก์ชัน จากนั้น เนื่องจากฟังก์ชันนี้กำหนดโดยผู้ใช้ เราจึงตั้งชื่อเป็น 'function1' และส่งคำว่า 'queue' เป็นอาร์กิวเมนต์ หลังจากนั้น เราเรียกใช้ฟังก์ชัน 'print()' ส่งผ่านคำสั่ง 'builder: Running', 'flush' และ object 'True' ฟังก์ชันการพิมพ์ของ Python มีตัวเลือกเฉพาะที่เรียกว่า flush ซึ่งให้ผู้ใช้เลือกว่าจะบัฟเฟอร์เอาต์พุตนี้หรือไม่ ขั้นตอนต่อไปคือการสร้างงาน ในการทำเช่นนี้ เราใช้ 'for' และสร้างตัวแปร 'm' และตั้งค่าช่วงเป็น '5' จากนั้นในบรรทัดถัดไป ให้ใช้ “random()” และเก็บผลลัพธ์ไว้ในตัวแปรที่เราสร้างขึ้นซึ่งก็คือ “value” สิ่งนี้บ่งชี้ว่าฟังก์ชันเสร็จสิ้นการวนซ้ำ 5 ครั้งแล้ว โดยที่การวนซ้ำแต่ละครั้งจะสร้างจำนวนเต็มแบบสุ่มตั้งแต่ 0 ถึง 5

จากนั้น ในขั้นตอนต่อไปนี้ เราเรียกฟังก์ชัน 'sleep()' และส่งอาร์กิวเมนต์ 'value' เพื่อหน่วงเวลาของส่วนนั้นไว้ตามจำนวนวินาทีที่กำหนด จากนั้น เราเรียก 'คิว' ด้วยเมธอด 'put()' เพื่อเพิ่มค่าให้กับคิว จากนั้นผู้ใช้จะได้รับแจ้งว่าไม่มีงานที่ต้องดำเนินการอีกต่อไปโดยการเรียกใช้เมธอด “queue.put()” อีกครั้งและส่งผ่านค่า “None” จากนั้น เรารันเมธอด “print()” ส่งคำสั่ง “builder: ready” พร้อมกับ “flush” และตั้งค่าเป็น “True”


ตอนนี้เรากำหนดฟังก์ชันที่สอง 'function2' และกำหนดคีย์เวิร์ด 'queue' เป็นอาร์กิวเมนต์ จากนั้น เราเรียกฟังก์ชัน 'พิมพ์()' ขณะที่ส่งรายงานสถานะ 'ผู้ใช้: กำลังทำงาน' และ 'ล้างข้อมูล' ซึ่งตั้งค่าเป็น 'จริง' เราเริ่มการทำงานของ “function2” โดยใช้เงื่อนไข while จริงเพื่อนำข้อมูลออกจากคิวและใส่ลงในตัวแปร “item” ที่สร้างขึ้นใหม่ จากนั้น เราใช้เงื่อนไข “if” หรือ “item is None” เพื่อขัดจังหวะการวนซ้ำหากเงื่อนไขเป็นจริง หากไม่มีรายการใดเลย ระบบจะหยุดและขอรายการจากผู้ใช้ งานจะหยุดการวนซ้ำและสิ้นสุดในกรณีนี้หากรายการที่ได้รับจากค่าเป็นโมฆะ จากนั้น ในขั้นตอนต่อไปนี้ เราเรียกฟังก์ชัน 'print()' และจัดเตรียมรายงาน 'ผู้ใช้: พร้อม' และพารามิเตอร์ 'flush=True'


จากนั้นเราเข้าสู่กระบวนการหลักโดยใช้ “ถ้าชื่อ = main_” เราสร้างคิวโดยเรียกเมธอด “queue()” และจัดเก็บไว้ในตัวแปร “queue” ต่อไป เราสร้างกระบวนการโดยเรียกฟังก์ชันผู้ใช้ว่า “function2” สำหรับสิ่งนี้ เราเรียกว่าคลาส 'กระบวนการ' ภายในนั้น เราส่งผ่าน “target=function2” เพื่อเรียกใช้ฟังก์ชันในกระบวนการ ส่งผ่านอาร์กิวเมนต์ “queue” และเก็บไว้ในตัวแปร “User_process” จากนั้นกระบวนการจะเริ่มต้นด้วยการเรียกเมธอด “start()” ด้วยตัวแปร “User_ process” จากนั้นเราทำซ้ำขั้นตอนเดิมเพื่อเรียก 'function1' ในกระบวนการและใส่ไว้ในตัวแปร 'builder process' จากนั้น เราเรียกโปรเซสด้วยเมธอด “join()” เพื่อรอการดำเนินการ


เมื่อแสดงแล้ว คุณจะเห็นคำสั่งของทั้งสองฟังก์ชันในเอาต์พุต จะแสดงรายการที่เราเพิ่มโดยใช้ 'put()' และ 'get()' โดยใช้เมธอด 'get()' ตามลำดับ

บทสรุป

เราได้เรียนรู้เกี่ยวกับคิวการประมวลผลหลายตัวของ Python ในบทความนี้ เราใช้ภาพประกอบที่ให้มา ในตอนแรก เราได้อธิบายวิธีสร้างคิวในการประมวลผลหลายตัวของ Python โดยใช้ฟังก์ชันคิว () จากนั้น เราใช้วิธี 'qsize()' เพื่อระบุคิว เรายังใช้เมธอดของคิว put() และ get() คลาสสลีปของโมดูลเวลาและคลาสสุ่มของโมดูลสุ่มถูกกล่าวถึงในตัวอย่างสุดท้าย