LINUX.ORG.RU

python signal threading

 , ,


0

2
import signal
def sig_handler(signum,temp):
  for_print.acquire()
  print("Got signal",signum,'at',time.asctime())
  for_print.release()

def signaler():
  while True:
    signal.pause()

signal.signal(12,sig_handler)
for_print = threading.Lock()
sgn = threading.Thread(target=signaler,args=())
sgn.start()
while True:
  time.sleep(7)
  for_print.acquire()
  print('main thread')
  for_print.release()

Код должен выдавать раз в 7 секунд фразу 'main thread', а по сигналу kill -12 PID выводить инфу о времени сигнала. Проблема в том что после вывода инфы о сигнале сразу выводится 'main thread' и таймер sleep сбрасывается. Изначально задумывалось два потока, один обрабатывает сигнал, а другой выполняет основной цикл. Где моя ошибка подскажите.


а по сигналу kill -12 PID

12

У сигналов есть имена. И у разных платформ номера не совпадают. Лучше напиши USR2.

Ну и лучше если ты напишешь что на самом деле выводит программа. Я подозреваю «конфликт» между signal.pause и time.sleep. Оба они основаны на ожидании сигналов.

true_admin ★★★★★ ()

Проблема в том что после вывода инфы о сигнале сразу выводится 'main thread' и таймер sleep сбрасывается.

нужно читать мануалы

The actual suspension time may be less than that requested because any caught signal will terminate the sleep() following execution of that signal’s catching routine

ещё могут быть дедлоки если сигнал вызывается около print('main thread') или сигнал придёт во время обработки сигнала. Это самый большой косяк в твоём коде.

mashina ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.