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

คิวลำดับความสำคัญแบบมัลติเธรดใน Python


โมดูลคิวช่วยให้คุณสร้างออบเจ็กต์คิวใหม่ที่สามารถเก็บรายการตามจำนวนที่ระบุได้ มีวิธีการดังต่อไปนี้ในการควบคุมคิว -

  • get() − get() จะลบและส่งคืนรายการจากคิว
  • ใส่() − การวางจะเพิ่มรายการไปยังคิว
  • qsize() − qsize() ส่งกลับจำนวนรายการที่อยู่ในคิวในขณะนี้
  • empty() − ค่าว่าง ( ) คืนค่า True หากคิวว่าง มิฉะนั้น เท็จ
  • เต็ม() − full() คืนค่า True หากคิวเต็ม มิฉะนั้น เท็จ

ตัวอย่าง

#!/usr/bin/pythonimport Queueimport threadingimport timeexitFlag =0class myThread (threading.Thread):def __init__(self, threadID, name, q):threading.Thread.__init__(self) self.threadID =threadID ตัวเอง ชื่อ =ชื่อ self.q =q def run (ตัวเอง):พิมพ์ "กำลังเริ่ม" + self.name process_data (ชื่อตัวเอง, self.q) พิมพ์ "Exiting" + self.namedef process_data (threadName, q):ในขณะที่ไม่ใช่ exitFlag :queueLock.acquire() ถ้าไม่ใช่ workQueue.empty():data =q.get() queueLock.release() พิมพ์ "%s การประมวลผล %s" % (threadName, data) อื่น:queueLock.release() time.sleep (1)threadList =["Thread-1", "Thread-2", "Thread-3"]nameList =["หนึ่ง", "สอง", "สาม", "สี่", "ห้า"]queueLock =เธรด .Lock()workQueue =Queue.Queue(10)threads =[]threadID =1# สร้าง threads ใหม่สำหรับ tName ใน threadList:thread =myThread(threadID, tName, workQueue)thread.start()threads.append (thread) threadID + =1# กรอก que uequeueLock.acquire() สำหรับคำใน nameList:workQueue.put(word)queueLock.release()# รอให้คิวว่างในขณะที่ไม่ workQueue.empty():pass# แจ้งเธรดว่าถึงเวลา exitexitFlag =1# รอให้เธรดทั้งหมด สมบูรณ์สำหรับ t ในเธรด:t.join()print "Exiting Main Thread"

เมื่อโค้ดด้านบนถูกรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −

การเริ่มเธรด-1การเริ่มเธรด-2การเริ่มเธรด-3การเธรด-1