Найти - Пользователи
Полная версия: signal + threads (скрипт не прерывается по SIGINT и SIGTERM)
Начало » Python для новичков » signal + threads (скрипт не прерывается по SIGINT и SIGTERM)
1
hop
Привет всем!!!
Пытаюсь понять как накодить простенький сервер. Застрял, скрипт не хочет завершаться когда я жму CTRL+C или посылаю kill pid.
Вод код (обрезал все лишнее):
#!/usr/bin/env python
# -*- coding: utf8 -*-

import sys
import signal
import threading
from time import strftime

class TestTread(threading.Thread):

def __init__(self,):
#signal 15 (kill)
signal.signal(signal.SIGTERM, self.mystop)
#signal 2 (ctrl+c)
signal.signal(signal.SIGINT, self.mystop)
threading.Thread.__init__(self)

def run(self):
while(1):
pass

def mystop(self, signum, frame):
write_log("... was stoped")
sys.exit(1)

def write_log(self, tmp_msg):
try:
now_time = strftime("%d.%m.%Y %H:%M:%S")
file = open(log,'a')
file.write(now_time + " - " + tmp_msg+'\n')
file.close()
return 1
except:
return 0

#======================================================

if __name__ == "__main__":

log = "/123.log"
for i in range(1,10):
TestTread().start()
Нагуглил вот это http://code.activestate.com/recipes/496735/ , но тут только про SIGINT и я не совсем понимаю как в мой код вставить KeyboardInterrupt. Пробовал без потоков, все работает. Может есть какоето другое решение или я где то, что то не догоняю?
Viper
Из докумнтации к модулю signal:
Some care must be taken if both signals and threads are used in the same program. The fundamental thing to remember in using signals and threads simultaneously is: always perform signal() operations in the main thread of execution. Any thread can perform an alarm(), getsignal(), pause(), setitimer() or getitimer(); only the main thread can set a new signal handler, and the main thread will be the only one to receive signals (this is enforced by the Python signal module, even if the underlying thread implementation supports sending signals to individual threads). This means that signals can’t be used as a means of inter-thread communication. Use locks instead.
hop
Понял. Спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB