**在Python中设置时间限制可通过signal
模块、multiprocessing
进程控制或第三方库func_timeout
实现,核心方法包括:① **信号中断**强制终止耗时任务;② **子进程监控**超时自动终止;③ **装饰器封装简化超时逻辑。 以下是具体实现方案:
-
使用
signal
模块(适用于Unix系统)
通过signal.alarm()
设置定时器,结合异常处理中断代码执行:pythonCopy Code
import signal def timeout_handler(signum, frame): raise TimeoutError("Execution timed out") signal.signal(signal.SIGALRM, timeout_handler) signal.alarm(5) # 5秒后触发超时 try: long_running_task() finally: signal.alarm(0) # 重置计时器
-
multiprocessing
进程控制(跨平台)
启动子进程并监控执行时间,超时强制终止:pythonCopy Code
from multiprocessing import Process def run_with_timeout(func, args=(), timeout=10): p = Process(target=func, args=args) p.start() p.join(timeout) if p.is_alive(): p.terminate() raise TimeoutError("Task exceeded time limit")
-
第三方库
func_timeout
(推荐简单场景)
直接通过装饰器或函数调用设置超时:pythonCopy Code
from func_timeout import func_timeout, FunctionTimedOut try: func_timeout(5, long_running_task) # 5秒限制 except FunctionTimedOut: print("Task timeout")
提示: 根据场景选择方案——信号法轻量但兼容性差,进程控制稳定但资源消耗略高,第三方库适合快速集成。注意处理超时后的资源释放问题。