如何让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
相关产品推荐
相关产品推荐

