【发布时间】:2014-11-15 10:58:16
【问题描述】:
我需要在while True 循环中每隔 5 秒执行一段代码。我知道 threading.Timer(5, foo).start() 将每 5 秒运行一次,但我的 foo() 函数取决于我的 while 循环中的一个变量。
foo 实际上是在另一个线程上运行的,我不想仅仅为了计时而阻塞当前线程。
+------------------------while #main-thread---------------------------------
|
+..........foo(val)..........foo(val)...........foo(val)............foo(val)
-5s- -5s- -5s- -5s-
类似这样的:
def input(self):
vals = []
while True:
# fill the vals
# run `foo(vals)` every 5 seconds
def foo(vals):
print vals
有没有 Pythonic 的方式来做到这一点?
【问题讨论】:
-
使用 time.sleep(5) 停止执行 5 秒
-
您的示例代码可能过于简化。该变量可以从另一个胎面访问,但如果这样做可能会导致问题。您必须以某种方式同步对两个线程使用的变量的访问。但是如何做到这一点没有一般规则,因为这在很大程度上取决于您对变量的实际操作。
标签: python python-2.7 scheduled-tasks timer-jobs