按下 Ctrl+C 时优雅地停止任务,你可以使用 Python 的 signal 模块捕获 SIGINT 信号(即 Ctrl+C 发送的中断信号),并在捕获时执行清理操作或退出程序。

import argparse
import signal
import sys
import time

# 全局标志,用于控制主循环是否继续运行
running = True


def signal_handler(sig, frame):
    global running
    print("\n[INFO] Ctrl+C pressed. Stopping gracefully...")
    running = False


def main():
    global running

    # 设置信号捕获
    signal.signal(signal.SIGINT, signal_handler)

    # 解析命令行参数
    parser = argparse.ArgumentParser()
    parser.add_argument('-a', '--age', type=int, default=1, help='age.')
    parser.add_argument('-d', '--duration', type=int, default=None, help='Duration to run.')
    parser.add_argument('-n', '--name', type=str, default='mdwsw')
    args = parser.parse_args()

    print(f"[INFO] Starting task with name: {args.name}")
    if args.duration:
        print(f"[INFO] Will run for {args.duration} seconds unless interrupted.")

    start_time = time.time()

    try:
        while running:
            # 模拟任务执行
            print("Running task...")
            time.sleep(1)

            # 如果设置了运行时间,检查是否超时
            if args.duration and (time.time() - start_time) >= args.duration:
                print("[INFO] Duration reached. Exiting.")
                break

    except Exception as e:
        print(f"[ERROR] Exception occurred: {e}")
    finally:
        print("[INFO] Cleaning up resources...")


if __name__ == "__main__":
    main()

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐