无限循环中的Python周期性任务

无限循环中的Python周期性任务,python,python-2.7,scheduled-tasks,timer-jobs,Python,Python 2.7,Scheduled Tasks,Timer Jobs,我需要在中执行一段代码,而True则每隔5秒循环一次。我知道threading.Timer(5,foo).start()将每5秒运行一次,但我的foo()函数取决于while循环中的变量 foo实际上是在另一个线程上运行的,我不想为了计时而阻塞当前线程 +------------------------while #main-thread--------------------------------- | +..........foo(val)..........foo(val).......

我需要在
中执行一段代码,而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
有什么类似于蟒蛇的方法吗?

使用以下功能:

import time
def input(self):
      vals = []
      while True:
           # fill the vals
           foo(vals)
           time.sleep(5)

def foo(vals):
    print vals

请注意,仅当运行该命令所需的时间可以忽略不计时,该命令才会每5秒运行一次。

使用time.sleep(5)停止执行5秒您的示例代码可能过于简化。可以从另一个踏板访问该变量,但如果这样做,可能会导致问题。您必须以某种方式同步对两个线程使用的变量的访问。但是没有一般的规则如何做,因为这在很大程度上取决于您对变量的实际操作。谢谢,但是
foo
实际上是在另一个线程上运行的,我不想阻止当前线程。你知道吗?在每个线程中都有一个
,而True
?一个在主线程中用于任何目的,另一个在另一个线程中用于
foo
sleep