在无限循环中,是否有任何模块可以在特定时间(例如 10 分钟)内临时暂停其中一个变量的功能?

In an infinite loop, is there any module that can temporary suspend a function of one of the variables for a specific time (eg. 10min)?

我有一个无限循环 运行 代码,它从外部来源收集实时数据。

while True:

    x = Livedata() # this should stop for 10 mins when x < 30, then restart.
    y = Livedata()
    z = Livedata()

我希望代码暂停收集数据 N 分钟 对于满足特定条件的 x 变量,例如x < 30。 当 x 暂停时,代码不应停止收集 yz 的数据。 N 分钟后,再次收集 x 的数据,直到再次满足条件。

您可以将多处理与 threading 模块一起使用:

from threading import Thread
from time import sleep

x = Thread(target=Livedata)
y = Thread(target=Livedata)
z = Thread(target=Livedata)

y.start() # Start y
z.start() # Start z
sleep(600)
x.start() # Only start x when 10 minutes have past

我认为线程是最好的选择,但如果你想要一种无线程的方式,你可以使用类似 time.time() 的东西来跟踪你想做的每件事的每个开始时刻。

如果 x > 30,这将始终运行 x 的代码,否则它会跳过 x = liveData() 10 分钟。 10 分钟后它重新启动。 yz 只是做他们已经做过的事情。

import time

def minutesPast(end_time, start_time):
    return ( end_time - start_time ) / 60

TIME_INTERVAL = 10 # minutes

x_start = time.time()

# your loop
while True:

    time_now = time.time()

    # code for 'x'
    if ( x > 30 ) or (minutesPast(time_now, x_start) > TIME_INTERVAL) :
        x_start = time.time()
        x = liveData()

    y = liveData()
    z = liveData()