2017-03-06 68 views
2

我想在Python 2.7中使用模塊線程實現ThreadPool + Scheduler。我的池包含最先分配的線程,而我的調度程序處理哪個線程應該執行任務。我有一些執行系統進程的線程,並等待它的結果。這些系統調用可能需要很長時間,我希望能夠在任務執行時重用該線程。Python線程調度

例子:

  1. 線程池有8個線程
  2. 8任務進來一起
  3. 第九任務延遲小
  4. 任務1需要1024年後進來(也許它可以使用一些優化)。
  5. 任務2-8需要1年。
  6. 任務9進來,只需要1秒鐘。
  7. 由於正在使用所有線程,因此無法執行任務9。

任務1具有類似於此

build_process = subprocess.Popen(build_command, shell=False) 
build_process.wait() 

代碼反正是有任務1從搶線程,同時它的等待,做任務9?然後,當任務9完成回到任務1(等待該過程完成?)Python是否已經實現了這樣的事情?

回答

1

不,這在基本的Python中是不可能的。

什麼是可能的,儘管比僅僅擁有第十個線程更多的工作將是有一個事件隊列要做,主線程填充該隊列中的東西(到目前爲止這是正常的),並且然後讓每個線程都足夠聰明,以便知道何時它正在等待(例如完成一個子過程),然後執行另一個任務。請注意,我不要推薦這種方法。只需在線程池中創建另一個線程。

如果您有辦法瞭解哪些任務快速且哪些任務短,則可以創建兩個線程池:一個用於長期任務,另一個用於快速任務,並將任務分配給相應的池隊列。

+0

謝謝。在新版本的Python中,這不是事件可能嗎? – Taztingo

+0

@Taztingo:不幸的不是。一旦一個線程被啓動,操作該線程的唯一支持方式就是來自線程本身,在這種情況下,你可能只需要第十個線程。 –