CtrlC到多线程python脚本

2024-09-21 03:22:51 发布

您现在位置:Python中文网/ 问答频道 /正文

这是在cygwin平台上。你知道吗

我正在尝试使用Ctrl-C打印python脚本中挂起/活动线程的信息。线程实际上是对运行各种任务的各种linux机器的ssh调用(子进程),可能需要随机的时间(最多15分钟)来完成并重新连接。你知道吗

我编写了一个如下所示的信号处理函数来打印第一个Ctrl-C上的信息,如果在5秒内按两次Ctrl-C,它就会终止脚本。你知道吗

如果脚本运行很长时间,我可以按Ctrl-C检查挂起的线程(SSH会话)是什么

我试图简化整个脚本粘贴在这里,但它有点复杂。不过,下面是signalhandler。你知道吗

问题是按Ctrl-C的效果有点随机。有时它可以像预期的那样工作,但有时,在按Ctrl-C键的过程中,子线程由于某种原因被终止(不完全确定),这会扰乱处理过程。不知道这是怎么发生的。在其他一些情况下,脚本崩溃。你知道吗

有没有办法避免将Ctrl-C发送给子线程,而只让父线程处理它并调用处理函数?你知道吗

有没有别的方法可以达到我的目的?在主线程等待时打印一些信息线程连接(多个连接)。你知道吗

#!/usr/bin/python3.7

from __future__ import print_function
import re, argparse, sys, subprocess, queue, threading, signal
from threading import Thread
from time import sleep

signal.signal(signal.SIGINT, keyboardInterruptHandler)
killCount=2

def keyboardInterruptHandler(signal, frame):
    global killCount, blahblah_to_print_info_about_active_threads
    if (killCount >= 2):
                print("Print Information about pending/active Threads", file=sys.stderr)
                sys.stderr.flush()
    killCount -= 1
    print("\nKILLCOUNT = %d" %killCount, file=sys.stderr)
    sys.stderr.flush()
    if (killCount <= 0):
        sys.exit("Killed by user")
    sleep(5)
    killCount=2

Tags: fromimport脚本信息signalstderrsyssleep

热门问题