Судя по «, я также могу воспроизвести это с помощью простого примера чата », виновным является Twisted. Люди в Интернете сообщают, что Twisted сервисы иногда отказывают таким образом: Re: SIGBREAK для windows .
Twisted имеет внутреннюю функцию регистрации. Примером его использования является ответ на Запутанный запуск / остановка фабрики / протокола без шумных сообщений журнала . Если бы вы использовали его, вы бы уже увидели сообщение « полученный SIGBREAK ... », указывающее на основную причину.
Кстати, я использую приведенный ниже код для регистрации необработанных исключений в моих скриптах. Это всегда хорошая идея, если сценарий должен запускаться без присмотра (или другими лицами, для которых вы диагностируете проблемы: ^)).
# set up logging #####################################
import sys,os,logging
logfile = os.path.splitext(os.path.basename(sys.argv[0]))[0]+".log"
logging.basicConfig(\
format='%(asctime)s %(levelname)-8s %(message)s',\
filename=logfile,\
level=logging.DEBUG)
l = logging.getLogger()
#to avoid multiple copies after restart from pdb prompt
if len(l.handlers)<=1: l.addHandler(logging.StreamHandler(sys.stdout))
#hook to log unhandled exceptions
def excepthook(type,value,traceback):
logging.exception("Unhandled exception occured",exc_info=(type,value,traceback))
old_excepthook(type,value,traceback)
old_excepthook = sys.excepthook
sys.excepthook = excepthook
# ####################################################