2012-04-19 141 views
0

我有一個Python應用程序是這樣的:別人蟒蛇線程同步

  1. 主線程是GUI
  2. 有是甚至GUI
  3. 配置線程之前開始配置線程開始的幾個獨立線程

=>如何讓GUI知道所有這些「獨立線程」(3.)已完成?我如何檢測它在我的程序(只是給我一般的想法)

我知道信號量,但我無法弄清楚,因爲這是一個更復雜的邏輯比我用於處理線程時。

PS所有這些線程都是來自PyQt的QThreads,如果這是重要的,但我懷疑它。

感謝

+0

確保所有其他線程已經開始,然後做'在other_threads T:t.wait()'將阻塞,直到other_threads已經完成(HTTP://www.riverbankcomputing .co.uk /靜態/文檔/ PyQt4的/ HTML/qthread.html#等待)。如果使用'threading'模塊,請使用't.join()'。 – 2012-04-19 22:03:01

回答

1

Queue module是偉大的,而不必擔心鎖或其他互斥線程之間進行通信。它具有一對方法,task_done()和join(),用於表示完成任務並等待所有任務完成。下面是從文檔的例子:

def worker(): 
    while True: 
     item = q.get() 
     do_work(item) 
     q.task_done() 

q = Queue() 
for i in range(num_worker_threads): 
    t = Thread(target=worker) 
    t.daemon = True 
    t.start() 

for item in source(): 
    q.put(item) 

q.join()  # block until all tasks are done 
+0

我想他只是想知道這些線程何時完成。 '對於線程中的t:t.join()'(或者對於'QThreads','.wait()')可以正常工作。 – 2012-04-19 22:10:03

+0

我最終使用了一個我在互斥體中訪問的簡單計數器。一旦該計數器等於我稱爲函數的線程數量。所以工作流程如下: 1.啓動所有線程 2.每個小線程在接近完成時調用我的方法 3.它將互斥體中的全局計數器加1 4.一旦全局變量等於線程執行代碼 – kosta5 2012-04-21 08:41:34