无限循环中的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
。