2014-06-06 78 views
0

如何在下面的例子中正確使用連接(超時)功能?超時似乎對主線程執行沒有影響。從文檔中,主線程被阻塞,直到線程加入或超時。如何在Python線程中正確使用連接(超時)?

import threading,time 

class Server(threading.Thread): 

    def __init__(self, hostname): 
     super(Server, self).__init__() 
     self.__hostname = hostname 

    def run(self): 
     print self.__hostname+' left' 
     time.sleep(5) 
     print self.__hostname+' back' 
     sem.release() 

#init 
sem = threading.BoundedSemaphore(4) 
threads = [] 

for x in xrange(1,5): 
    sem.acquire() 
    t = Server('thread '+str(x)) 
    threads.append(t) 
    t.start() 

for t in threads: 
    t.join(2) 

print 'why is this line executed by main thread 5 seconds after, not 2?' 
+2

每個加入呼叫都有其自己的2秒超時。 – user2357112

+0

有關解決方案,請參閱:http://stackoverflow.com/q/24065808/2073595 – dano

回答

1

您有一個for循環,嘗試用2秒超時連接每個4個線程。

第一個.join()呼叫需要2秒鐘,然後超時。第二個也是一樣的。第三個線程在5秒後結束(第三個.join(2)調用後1秒),第四個線程在加入時已經完成。 2 + 2 + 1 = 5.

+0

嗯...哇...謝謝...所以你也可以提出解決方案嗎? :) – user3388884

相關問題