2010-07-19 107 views
2

我想Python中的3個線程運行n秒。我想同時啓動它們並讓它們在同一時間完成(毫秒)。我該怎麼做呢?Python線程與計時器

threading.Timer僅在前一個完成後纔開始。

+0

在某些情況下,它可能很難保證他們會真正彼此毫秒內完成。例如,假設代碼調用一個不釋放全局解釋器鎖(GIL)的非Python庫。在這種情況下,線程的完成時間可能會錯開至少執行庫調用所需的時間長度。您需要在線程之間實現某種通信以在允許它們完成之前同步它們。 (或者,也許重新考慮它是否真的*那對他們來說同時完成是重要的?) – 2010-07-19 15:44:02

+1

它並不一定非常接近。我說「毫秒」意味着它不一定是10秒。我不是在說「毫秒內」作爲一個約束。謝謝! – sean 2010-07-19 16:28:49

回答

4
import threading 
import time 

class A(threading.Thread): 
    def run(self): 
    print "here", time.time() 
    time.sleep(10) 
    print "there", time.time() 


if __name__=="__main__": 
    for i in range(3): 
    a = A() 
    a.start() 

打印:

here 1279553593.49 
here 1279553593.49 
here 1279553593.49 
there 1279553603.5 
there 1279553603.5 
there 1279553603.5 
+0

請參閱Dan對原帖的評論。這不能保證同時完成(甚至是排序)(例如,某些線程可能不會收到CPU時間)。另外,使用「睡眠」並不真實,據說線程應該在此期間做些事情... – rbp 2010-07-19 16:07:14

+0

@rbp:你說得對,但是OP沒有指出每個線程必須做什麼 - 如果一個線程比另一個線程有更多的工作,那麼我真的沒有看到問題的重點......我認爲,作爲一個實際的解決方案,這可能會回答OP的需求(線程永遠不會完成「時間」)。 – adamk 2010-07-19 16:18:08