【问题标题】:Python Threading with Timer带定时器的 Python 线程
【发布时间】:2010-07-19 15:29:08
【问题描述】:

我希望 Python 中的 3 个线程运行 n 秒。我想同时启动它们并让它们同时完成(在几毫秒内)。我该怎么做?

threading.Timer 仅在前一个完成后才开始。

【问题讨论】:

  • 在某些情况下,可能很难保证它们实际上会在几毫秒内完成。例如,假设代码调用了一个不释放全局解释器锁 (GIL) 的非 Python 库。在这种情况下,线程的完成时间可以至少错开执行库调用所需的时间长度。您需要在线程之间实现某种通信以在允许它们完成之前将它们同步。 (或者,也许重新考虑一下他们同时完成是否真的那么很重要?)
  • 它甚至不必非常接近。我说“毫秒内”是指它不必正好是 10 秒。我并不是说“在几毫秒内”作为约束。谢谢!

标签: python multithreading timer


【解决方案1】:
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

【讨论】:

  • 查看原始帖子中 Dan 的评论。这不能保证同时完成(甚至是某种程度的)(例如,某些线程可能不会收到 CPU 时间)。此外,使用“睡眠”并不是很实用,据说线程应该在此期间做一些事情......
  • @rbp:你是对的,但是 OP 没有说明每个线程必须做什么 - 如果一个线程比另一个线程有更多的工作,那么我真的不明白这一点问题的...我认为作为一个实用的解决方案,这可能会满足 OP 的需求(无论哪种方式,线程都不会“同时”完成)。
猜你喜欢
  • 2017-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 2013-02-07
  • 2018-11-16
  • 1970-01-01
相关资源
最近更新 更多