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

如何让Python脚本永久运行?循环导入control_as_py仅执行一次问题求解

问题原因

Python 内置的模块导入机制有缓存逻辑,同一个模块在程序运行周期内默认只会被导入1次:

  • 第一次执行import control_as_py时,解释器会执行模块的所有顶层代码,同时把加载完成的模块存入sys.modules缓存
  • 后续循环中重复执行import语句时,解释器会直接从缓存中读取已加载的模块,不会再次执行模块内的代码,所以看起来脚本只运行了一次就停止了。

解决方法

方案1(推荐):将control_as_py的业务逻辑封装为函数

如果可以修改control_as_py的代码,优先把所有要重复执行的逻辑封装为入口函数,比如名为main,示例如下:

# control_as_py.py 内的代码示例
def main():
    # 原本写在模块顶层的所有逻辑移到这里
    print("执行业务逻辑")

if __name__ == "__main__":
    main()

之后你的启动脚本调整为如下写法即可,仅需导入一次模块,循环调用入口函数:

import control_as_py

while True:
    control_as_py.main()

这个方案逻辑清晰、性能更高,也更容易调试和处理异常,是生产环境的首选写法。

方案2(临时兼容):使用importlib.reload强制重载模块

如果你无法修改control_as_py的代码,所有逻辑都直接写在模块顶层,可以用importlib.reload强制每次循环都重新加载执行模块的所有代码:

import importlib
import control_as_py
import time

while True:
    try:
        importlib.reload(control_as_py)
    except Exception as e:
        print(f"运行出错,1秒后重试:{e}")
        time.sleep(1)

注意这个方案属于非常规用法,存在不少坑:比如模块内的全局变量每次重载都会被重置、部分依赖模块状态的逻辑可能运行异常,仅适合临时测试用,不推荐生产环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:36:02