在无限循环中,是否有任何模块可以在特定时间(例如 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
暂停时,代码不应停止收集 y
和 z
的数据。 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 分钟后它重新启动。 y
和 z
只是做他们已经做过的事情。
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()
我有一个无限循环 运行 代码,它从外部来源收集实时数据。
while True:
x = Livedata() # this should stop for 10 mins when x < 30, then restart.
y = Livedata()
z = Livedata()
我希望代码暂停收集数据 N
分钟
对于满足特定条件的 x
变量,例如x < 30
。
当 x
暂停时,代码不应停止收集 y
和 z
的数据。 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 分钟后它重新启动。 y
和 z
只是做他们已经做过的事情。
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()