2015-06-01 27 views
1

我想編寫一個腳本,它通過互聯網使用數據,並將每隔n秒鐘拉出的數據放入隊列/列表中,然後我將有數量的線程,我將在腳本開始時創建線程,這些線程將在隊列中添加和處理數據。我的問題是:讓所有線程都可以使用的全局隊列(或列表)

  1. 如何創建一個全局變量(列表/隊列)在我的腳本中,然後可以訪問我的所有線程?
  2. 在我的線程中,我計劃檢查隊列中是否有數據,如果是,則檢索此數據,釋放鎖並開始處理它。線程完成任務後,返回到開始並繼續檢查隊列。如果隊列中沒有數據,則休眠指定的時間,然後再次檢查隊列。
+4

這是*正確*什麼['Queue'](https://docs.python.org/2/library/queue.html)用於:*「Queue」模塊實現了多生產者,消費者隊列。當信息必須在多個線程之間安全地交換時,它在線程編程中特別有用。「* – jonrsharpe

回答

3

您可以定義Queue,並把它傳遞給多個線程:

from threading import Thread 
from Queue import Queue 

def task(queue): 
    while True: 
     item = queue.get() # blocks until an item is available 
     # process item 

queue = Queue() 
t = Thread(target=task, args=(queue,)) 
t.daemon = True 
t.start() 
0

如果你想成爲真正的多線程的應用程序,然後考慮使用獨立的隊列(如的ActiveMQ或zeromq)和消費它的由於GIL而在不同os進程中運行的腳本(使用獨立隊列,即使在網絡中使用它也是非常容易的 - 加上可擴展性)。

相關問題