在我的 .py 脚本中,我有 2 个函数。其中一个应每5 分钟调用一次,另一个应每4 小时调用一次。然而,第二个函数仅在脚本运行时运行一次,并且不再运行(而 5 分钟函数运行良好)。
#!/usr/bin/env python
import threading
def five_min():
threading.Timer(300, five_min).start()
print("5 min")
def four_h():
threading.Timer(14400, four_h).start()
print("4 h")
five_min()
four_h()
这是完整的代码,我在Linux(Raspberry Pi)上运行它
附注 我认为问题可能是 4_h 函数被 5_min 函数中断。
最佳答案
在再次调用 threading.Timer().start()
之前,您的 four_hour
函数可能会引发异常:
import threading
import logging
logger = logging.getLogger(__name__)
def five_min():
t = threading.Timer(5, five_min).start()
logger.info("5 min")
def four_hour():
1/0 # <-- Raise an exception
threading.Timer(4, four_hour).start()
logger.info("4 h")
logging.basicConfig(level=logging.DEBUG,
format='[%(asctime)s %(threadName)s] %(message)s',
datefmt='%M:%S')
five_min()
four_hour()
产量
[57:54 MainThread] 5 min
Traceback (most recent call last):
File "script.py", line 21, in <module>
four_hour()
File "script.py", line 12, in four_hour
1/0
ZeroDivisionError: integer division or modulo by zero
[57:59 Thread-1] 5 min
[58:04 Thread-2] 5 min
...
(注意:我更改了延迟,以便脚本更容易测试。一旦您 对脚本的定性行为感到满意,您可以根据需要延迟 愿望。)
<小时/>注:as clemtoy points out , 作为
只要不需要线程间或进程间通信,就可以
更容易 use
cron打电话
运行 Five_min
和 four_hour
函数的单独脚本。如果你这样做
需要进程间通信,使用 cron 可能仍然更好,但你会
必须以不同的方式构建代码,也许从数据库读取
了解以前的全局变量的状态。
关于python - 每 N 秒调用 2 个 python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31232507/