python - 每 N 秒调用 2 个 python 函数

标签 python timer python-multithreading

在我的 .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/

相关文章:

ruby-on-rails - Ruby:向简单的控制台测验应用程序添加计时器

python - Python 中的快速方法调用调度

c# - 如何在 signalR 的 OnDisconnected 事件中停止计时器

python - 接收流时中断python grpc客户端

python - 是否可以在阻塞并可能回调 Python 的 C 函数之前释放 GIL?

python - 自定义包已安装但在另一个项目中找不到

java - 如何修复名称错误: Java error in HecDSS Python Script

python - 创建两个值轴并绘制线段 matplotlib

python - 如何在 python 中链接目录(相当于 Linux 命令 ln -s)?

python - 如何在Python中的特定时间间隔后运行一个方法?