2013-03-20 77 views
2

我正在尋找一種方法來在Python中的多個線程之間傳遞值(整數,數組)。我明白這個任務可以通過使用Queue模塊來實現,但我對Python或這個特定的模塊都不是很熟悉。在Python中使用隊列模塊在線程間傳遞值

我有以下情況:每個線程需要根據自己的數據或來自其他線程的數據做一些計算。另外,每個線程都知道其他線程是否擁有特定作業所需的數據(所有線程都有一個所有線程的數組,所以任何線程都知道,對於任務X,他需要從特定線程(行,列)獲取數據,來自該陣列)。

線程之間的這種通信如何使用Queue模塊或其他技術來完成(隊列模塊似乎是正確的工作)。 任何幫助最受讚賞。非常感謝。

回答

2

使用隊列

通常,隊列中的場景下與一羣工作線程從隊列中獲取他們的工作。空閒線程正在隊列中等待新作業放入其中。然後,作業由一個線程執行,而所有剩餘的線程正在等待下一個作業。如果發佈的作業多於線程可用,則隊列開始填滿。

這並不適用於您描述的場景。也許你可以直接讀取數據而不用將其放入隊列中。如果你寫共享數據結構,你可以考慮一個鎖定策略。

您應該閱讀一般的並行編程。這些概念相當獨立於語言。然後你可以閱讀關於使用Python的線程的教程。互聯網上有關於這兩個主題的大量資料。

編輯:

使用threading.Event

最簡單的方式兩個線程之間進行通信的線程之間的通信是一個threading.Event。該事件可以設置爲true或false。通常,一個線程正在設置事件,另一個線程檢查事件的值並相應地執行。例如,該事件可能表明有新的事情要做。指示線程首先填充即將到來的任務所需的數據結構,然後將事件設置爲true。在事件成立之後,等待事件的另一個線程被激活。隨後,它讀出數據結構並執行任務。

+0

你能想出一個線程如何通知另一個特定的線程它需要什麼嗎?線程和另一個特定線程之間的通信方式?謝謝 – biggdman 2013-03-20 13:33:39

+0

有很多方法可以實現這一點(甚至可以(錯誤地)使用隊列)。我會去做一個簡單的線程事件,只有在絕對必要時纔會使它更復雜。 – 2013-03-20 13:43:17

+0

是否可以這樣做:詢問線程爲他想要數據的不同線程初始化不同的事件(如果他想從線程(行,列)數據中創建事件)。其運行方法中的每個線程處理事件。每個線程可以有一個行,col屬性,可以在每個線程的init方法中設置。我不是很連貫,對不起 – biggdman 2013-03-20 13:52:20