Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのマルチスレッド優先キュー


キューモジュールを使用すると、特定の数のアイテムを保持できる新しいキューオブジェクトを作成できます。キューを制御するには、次の方法があります-

  • get() − get()は、キューからアイテムを削除して返します。
  • put() −プットはアイテムをキューに追加します。
  • qsize() − qsize()は、現在キューにあるアイテムの数を返します。
  • empty() −キューが空の場合、empty()はTrueを返します。それ以外の場合はFalse。
  • full() −キューがいっぱいの場合、full()はTrueを返します。それ以外の場合はFalse。

#!/usr/bin/python
import Queue
import threading
import time
exitFlag = 0
class myThread (threading.Thread):
   def __init__(self, threadID, name, q):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.q = q
   def run(self):
      print "Starting " + self.name
      process_data(self.name, self.q)
      print "Exiting " + self.name
def process_data(threadName, q):
   while not exitFlag:
      queueLock.acquire()
         if not workQueue.empty():
            data = q.get()
            queueLock.release()
            print "%s processing %s" % (threadName, data)
         else:
            queueLock.release()
         time.sleep(1)
threadList = ["Thread-1", "Thread-2", "Thread-3"]
nameList = ["One", "Two", "Three", "Four", "Five"]
queueLock = threading.Lock()
workQueue = Queue.Queue(10)
threads = []
threadID = 1
# Create new threads
for tName in threadList:
thread = myThread(threadID, tName, workQueue)
thread.start()
threads.append(thread)
threadID += 1
# Fill the queue
queueLock.acquire()
for word in nameList:
   workQueue.put(word)
queueLock.release()
# Wait for queue to empty
while not workQueue.empty():
pass
# Notify threads it's time to exit
exitFlag = 1
# Wait for all threads to complete
for t in threads:
   t.join()
print "Exiting Main Thread"

上記のコードを実行すると、次の結果が生成されます-

Starting Thread-1
Starting Thread-2
Starting Thread-3
Thread-1 processing One
Thread-2 processing Two
Thread-3 processing Three
Thread-1 processing Four
Thread-2 processing Five
Exiting Thread-3
Exiting Thread-1
Exiting Thread-2
Exiting Main Thread

  1. C /C++での優先キューの紹介

    優先度キューは、割り当てられた優先度に従って要素が挿入または削除されるタイプのキューです。優先度は0〜10の範囲の整数値であり、0は最も優先度の高い要素を示し、10は次の要素を示します。最も低い優先度。優先キューを実装するために従うべき2つのルールがあります- 優先度が最も高いデータまたは要素は、優先度が最も低いデータまたは要素の前に実行されます。 2つの要素の優先度が、順番に実行される要素と同じである場合、それらはリストに追加されます。 スタック、キュー、リンクリストなどの優先キューを実装するために使用できる複数のデータ構造があります。この記事では、キューのデータ構造について説明しま

  2. Cのリンクリストを使用した優先キュー

    データと優先度は整数値として与えられ、タスクは与えられた優先度に従ってリンクリストを作成し、結果を表示することです。 キューはFIFOデータ構造であり、最初に挿入された要素が最初に削除されます。優先度付きキューは、優先度に応じて要素を挿入または削除できるキューの一種です。キュー、スタック、またはリンクリストのデータ構造を使用して実装できます。優先キューは、次のルールに従って実装されます- 優先度が最も高いデータまたは要素は、優先度が最も低いデータまたは要素の前に実行されます。 2つの要素の優先度が、順番に実行される要素と同じである場合、それらはリストに追加されます。 優先度付きキュー