对时区变化不敏感 Python 中的计时器
Insensitive to time zone changes Timer in Python
在我的外围设备中,我使用 python 定时器:
timer = Timer(45, my_func, [])
timer.start()
问题出在定时器运行期间,可以更改设备时区(由于设备连接到WIFI),定时器会立即停止。
是否存在另一种对时区变化不敏感的方法?
我用的是Python3.7.3
您可以用计时器包装您的函数,并且只使用常规线程。
示例代码:
from threading import Thread
import time
def wrapper_func(seconds: float, func, args: dict, sleep_interval_seconds: float = 0.1):
seconds_left = seconds
while seconds_left >= 0:
time.sleep(sleep_interval_seconds)
seconds_left -= sleep_interval_seconds
if args:
func(**args)
else:
func()
def timed_thread(seconds: float, target, func_args: dict = None) -> Thread:
return Thread(target=wrapper_func, args=(seconds, target, func_args))
def funcc():
print("BBBBBB")
t = timed_thread(3, funcc)
t.start()
print("AAAAA")
time.sleep(4)
print("CCCCC")
将打印:
AAAAA
BBBBBB
CCCCC
在我的外围设备中,我使用 python 定时器:
timer = Timer(45, my_func, [])
timer.start()
问题出在定时器运行期间,可以更改设备时区(由于设备连接到WIFI),定时器会立即停止。
是否存在另一种对时区变化不敏感的方法?
我用的是Python3.7.3
您可以用计时器包装您的函数,并且只使用常规线程。
示例代码:
from threading import Thread
import time
def wrapper_func(seconds: float, func, args: dict, sleep_interval_seconds: float = 0.1):
seconds_left = seconds
while seconds_left >= 0:
time.sleep(sleep_interval_seconds)
seconds_left -= sleep_interval_seconds
if args:
func(**args)
else:
func()
def timed_thread(seconds: float, target, func_args: dict = None) -> Thread:
return Thread(target=wrapper_func, args=(seconds, target, func_args))
def funcc():
print("BBBBBB")
t = timed_thread(3, funcc)
t.start()
print("AAAAA")
time.sleep(4)
print("CCCCC")
将打印:
AAAAA
BBBBBB
CCCCC