You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让网络监控类Python脚本安全地无限期运行?

Python 周期性监控脚本的优化与疑问解答

你当前的基础实现方向是对的,针对你的三个担忧,逐个说明:

1. sleep期间的CPU占用问题

完全不用担心,time.sleep(60)会让Python线程进入阻塞状态,此时脚本不会占用CPU时间片,系统会把CPU资源分配给其他进程/线程。对于嵌入式设备来说,这种方式反而非常高效,因为没有多余的轮询操作。

2. 内存泄漏问题

只要runCheckFunction()里没有特殊操作,函数退出后局部变量的内存会被自动释放:

  • Python的垃圾回收机制会跟踪对象的引用计数,函数内的局部变量在函数执行完毕后,引用计数会归零,对应的内存会被回收。
  • 需要注意的是,如果函数内有手动创建的资源(比如未关闭的网络连接、文件句柄),要确保显式释放(比如用with语句管理文件,或调用session.close()关闭requests会话)。只要没有循环引用,也没有长期持有局部变量的全局引用,就不会出现内存泄漏。

3. 更优的实现方式(标准模块推荐)

你的基础实现已经足够简单可靠,但如果需要更灵活的调度,标准库中有两个可选方案:

  • sched模块:基于事件的调度器,可以设置周期性任务,还能支持优先级调度。示例代码:
import sched
import time

def runCheckfunction():
    # 你的检测逻辑
    print("执行检测")

def periodic_check(scheduler, interval):
    runCheckfunction()
    scheduler.enter(interval, 1, periodic_check, (scheduler, interval))

if __name__ == '__main__':
    scheduler = sched.scheduler(time.time, time.sleep)
    scheduler.enter(0, 1, periodic_check, (scheduler, 60))
    try:
        scheduler.run()
    except KeyboardInterrupt:
        print("脚本终止")
  • threading.Timer:可以创建定时线程,每次任务完成后重新调度下一次执行,适合需要异步执行的场景,但复杂度比while+sleep高一些。

另外,针对长期运行的脚本,建议给runCheckfunction()加上异常捕获,避免单次请求失败导致整个脚本崩溃:

import time

def runCheckfunction():
    try:
        # 你的HTTP请求逻辑
        pass
    except Exception as e:
        print(f"检测出错: {e}")
        # 可选:记录日志到文件

if __name__ == '__main__':
    while True:
        runCheckfunction()
        time.sleep(60)

内容的提问来源于stack exchange,提问作者Jake quin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 04:00:04