如何实现Python函数10秒自动终止并循环执行?
解决方法
方案1:使用多进程(适合无法修改my_module的场景)
Python线程无法强制终止,若my_module是阻塞且不可修改的第三方模块,多进程是更可靠的实现方式。通过创建子进程运行模块任务,10秒后终止进程并循环重启:
import time import multiprocessing import my_module def run_module(): # 替换为实际调用my_module的代码,比如my_module.main()或其他入口函数 my_module.run() # 假设模块入口为run(),请根据实际情况修改 def main(): while True: proc = multiprocessing.Process(target=run_module) proc.start() # 等待10秒 time.sleep(10) # 终止进程并等待其彻底结束 proc.terminate() proc.join() print("模块已终止,即将重启...") if __name__ == "__main__": main()
方案2:给my_module添加停止标志(适合可修改模块源码的场景)
如果能修改my_module的代码,可以给模块添加全局停止标志,让模块在收到停止信号后自行退出,再循环重启:
首先修改my_module.py,加入停止逻辑:
# my_module.py import time stop_flag = False def run(): global stop_flag while not stop_flag: # 原模块的业务逻辑 print("模块运行中...") time.sleep(1)
主程序代码:
import time import threading import my_module def main(): while True: # 重置停止标志 my_module.stop_flag = False # 启动线程运行模块 thread = threading.Thread(target=my_module.run) thread.start() # 等待10秒 time.sleep(10) # 设置停止标志,让模块自行退出 my_module.stop_flag = True thread.join() print("模块已停止,即将重启...") if __name__ == "__main__": main()
注意事项
- 原代码中
my_function内仅写my_module是无效的,需替换为实际调用模块的入口函数(如my_module.main())才能执行任务。 - 使用多进程时,需确保
my_module的任务能在子进程中安全运行,避免资源泄漏。
内容的提问来源于stack exchange,提问作者DARK SOUL
相关产品推荐
相关产品推荐

