2013-12-13 87 views
1

我有一個模塊,導入線程並使用threading.activeCount()來確定何時完成所有線程。我最初使用標準的Python解釋器編寫我的模塊。然而,在ipython中導入我的模塊並調用依賴於threading.activeCount()的函數時,在腳本中使用我的模塊是很好的。我的功能從未返回。python和ipython threading.activeCount()

代碼:

for dev in run_list: 
    proc = threading.Thread(target=go, args=[dev]) 
    proc.start() 

while threading.activeCount() > 1: 
    time.sleep(1) 

我指出,第一導入穿線時與標準解釋器和主叫threading.activeCount()中,只有1個線程進行計數:在使用時的IPython

>>> import threading 
>>> threading.activeCount() 
1 
>>> threading.enumerate() 
[<_MainThread(MainThread, started 140344324941568)>] 

然而,初始計數爲2:

In [1]: import threading 

In [2]: threading.activeCount() 
Out[2]: 2 

In [3]: threading.enumerate() 
Out[3]: 
[<_MainThread(MainThread, started 140674997614336)>, 
<HistorySavingThread(Thread-1, started 140674935068416)>] 

該模塊被各種人使用使用各種解釋器工作,所以我想知道是否有更好的方法來處理這個問題(最好還是使用線程)?

回答

3

join你的線程,而不是依靠activeCount

threads = [] 
for dev in run_list: 
    proc = threading.Thread(target=go, args=[dev]) 
    proc.start() 
    threads.append(proc) 

for proc in threads: 
    proc.join() 
+0

非常好,謝謝您的回覆! – siesta

+0

我該如何檢查所有線程是否在def main中完成? 現在我有一個While循環運行,直到ActiveCount == 0 我如何檢查加入? – Steelzeh

+0

@Steelzeh連接等線程完成。加入後,您知道該線程已完成,而未檢查其他方式。 –

相關問題