使用threading.Timer发出多个web请求以更新值的Python脚本
我目前正在编写一个python脚本,它需要在linux服务器上保持运行。名为calculateValues()的脚本的主要功能负责每30秒运行一次,并在其操作中使用最新的值value1、value2、value3,例如根据阈值发送通知 每个值都有不同的更新频率。请注意,其中一个需要发出api请求并每100秒更新一次,另一个需要每5000秒更新一次,另一个需要每84000秒更新一次。无论这些值何时更新,calculateValues函数将每30秒运行一次,并使用当前值1、值2、值3的值 我有几个问题:使用threading.Timer发出多个web请求以更新值的Python脚本,python,Python,我目前正在编写一个python脚本,它需要在linux服务器上保持运行。名为calculateValues()的脚本的主要功能负责每30秒运行一次,并在其操作中使用最新的值value1、value2、value3,例如根据阈值发送通知 每个值都有不同的更新频率。请注意,其中一个需要发出api请求并每100秒更新一次,另一个需要每5000秒更新一次,另一个需要每84000秒更新一次。无论这些值何时更新,calculateValues函数将每30秒运行一次,并使用当前值1、值2、值3的值 我有几个问
#!/usr/bin/env python3
import threading
value1 = None
value2 = None
value3 = None
def calculateValues():
threading.Timer(30, calculateValues).start()
print('Value 1: ' + str(value1))
print('Value 2: ' + str(value2))
print('Value 3: ' + str(value3))
# Do something with these values here every 30 seconds
def updateValue1():
threading.Timer(100, updateValue1).start()
# make request to web api to get latest value1
valueFromRequest = 1000
# update global var value1
global value1
value1 = valueFromRequest
def updateValue2():
threading.Timer(5000, updateValue2).start()
# make request to web api to get latest value2
valueFromRequest = 1000
# update global var value2
global value2
value2 = valueFromRequest
def updateValue3():
threading.Timer(84000, updateValue3).start()
# make request to web api to get latest value3
valueFromRequest = 1000
# update global var value3
global value3
value3 = valueFromRequest
updateValue1()
updateValue2()
updateValue3()
calculateValues()
我是否使用线程计时器以正确的方式进行此操作?我注意到还有一个sched功能看起来很酷,但没有看到使用它的意义,因为它看起来主要用于延迟一定的时间,然后运行函数
这似乎讨论了sched
和threading.Timer
为了在linux机器上全天候运行这个脚本,最好的方法是将代码移到它上面,然后在终端中运行主python文件,并保持其打开状态?或者我应该将其打包为一个实际的python应用程序
如果使用threading.Timer
只是为了安排下一个作业,最好是在linux框中添加一个cron
作业,让cron处理该作业
关于此代码的结构/编写方式的任何建议也会有所帮助。我采用的这种全局变量方法似乎有点不对劲
如果您使用cron作业的执行方式,那么最好将一些参数传递给文件并执行所需的方法,而不需要计时器本身