У меня есть поток, сгенерированный из основного, который имеет в основном бесконечный цикл с функцией системной блокировки: что-то вроде:
def run(self):
global EXIT
while not EXIT:
data = self.conn.recv(1024)
...
Я определил обработчик сигнала для SIGINT
def sig_handler(signum, frame):
global EXIT, threads
if (signum == 2):#defensive
print("Called SIGINT")
EXIT = True
Будучи сигналом, перехваченным основным потоком, он прерывает основной поток. Однако другой поток застрял в функции блокировки: есть ли способ прервать функцию блокировки системных вызовов в python, чтобы выйти из этой функции?
Я не хочу останавливать процесс напрямую, как обычно делает SIGINT
, но я хотел бы просто прервать recv
, чтобы условие while больше не выполнялось, и я мог сделать другие вещи перед выходом.