我有一個Python應用程序是這樣的:別人蟒蛇線程同步
- 主線程是GUI
- 有是甚至GUI
- 配置線程之前開始配置線程開始的幾個獨立線程
=>如何讓GUI知道所有這些「獨立線程」(3.)已完成?我如何檢測它在我的程序(只是給我一般的想法)
我知道信號量,但我無法弄清楚,因爲這是一個更復雜的邏輯比我用於處理線程時。
PS所有這些線程都是來自PyQt的QThreads,如果這是重要的,但我懷疑它。
感謝
我有一個Python應用程序是這樣的:別人蟒蛇線程同步
=>如何讓GUI知道所有這些「獨立線程」(3.)已完成?我如何檢測它在我的程序(只是給我一般的想法)
我知道信號量,但我無法弄清楚,因爲這是一個更復雜的邏輯比我用於處理線程時。
PS所有這些線程都是來自PyQt的QThreads,如果這是重要的,但我懷疑它。
感謝
的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
我想他只是想知道這些線程何時完成。 '對於線程中的t:t.join()'(或者對於'QThreads','.wait()')可以正常工作。 – 2012-04-19 22:10:03
我最終使用了一個我在互斥體中訪問的簡單計數器。一旦該計數器等於我稱爲函數的線程數量。所以工作流程如下: 1.啓動所有線程 2.每個小線程在接近完成時調用我的方法 3.它將互斥體中的全局計數器加1 4.一旦全局變量等於線程執行代碼 – kosta5 2012-04-21 08:41:34
確保所有其他線程已經開始,然後做'在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