2010-07-19 82 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