Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用threading.Timer发出多个web请求以更新值的Python脚本_Python - Fatal编程技术网

使用threading.Timer发出多个web请求以更新值的Python脚本

使用threading.Timer发出多个web请求以更新值的Python脚本,python,Python,我目前正在编写一个python脚本,它需要在linux服务器上保持运行。名为calculateValues()的脚本的主要功能负责每30秒运行一次,并在其操作中使用最新的值value1、value2、value3,例如根据阈值发送通知 每个值都有不同的更新频率。请注意,其中一个需要发出api请求并每100秒更新一次,另一个需要每5000秒更新一次,另一个需要每84000秒更新一次。无论这些值何时更新,calculateValues函数将每30秒运行一次,并使用当前值1、值2、值3的值 我有几个问

我目前正在编写一个python脚本,它需要在linux服务器上保持运行。名为calculateValues()的脚本的主要功能负责每30秒运行一次,并在其操作中使用最新的值value1、value2、value3,例如根据阈值发送通知

每个值都有不同的更新频率。请注意,其中一个需要发出api请求并每100秒更新一次,另一个需要每5000秒更新一次,另一个需要每84000秒更新一次。无论这些值何时更新,calculateValues函数将每30秒运行一次,并使用当前值1、值2、值3的值

我有几个问题:

  • 我是否使用线程计时器以正确的方式进行此操作?我注意到还有一个sched功能看起来很酷,但没有看到使用它的意义,因为它看起来主要用于延迟一定的时间,然后运行函数

  • 为了在linux机器上全天候运行这个脚本,最好的方法是将代码移到它上面,然后在终端中运行主python文件,并保持其打开状态?或者我应该将其打包为一个实际的python应用程序

  • 关于此代码的结构/编写方式的任何建议也会有所帮助。我采用的这种全局变量方法似乎有点不对劲

  • 以下是脚本示例:

    #!/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作业的执行方式,那么最好将一些参数传递给文件并执行所需的方法,而不需要
    计时器本身