исполняющая программа python дважды блокирует ведение журнала из первого процесса - PullRequest
0 голосов
/ 22 октября 2018

У меня есть программа на Python, которую мне нужно запустить дважды и войти в систему, чтобы разделить файлы журнала.В основном это работает, однако после запуска второго процесса запись из функции обратного вызова в process1 останавливается.Интересно, что регистрация в потоке «heartbeat» в process1 продолжается и никогда не блокируется.Если я остановлю process2, возобновится полная регистрация в process1.

Вот примерный план моей программы:

class HeartBeat(threading.Thread)
    # logging always works

class TimedCompressedRotatingFileHandler(logging.handlers.TimedRotatingFileHandler)
    # extended TimedRotatingFileHandler that compresses logs on rollover

class myDaemon(Daemon)
    def cbFun(self, ...)
        # any logging in this function works until second process is run

if __name__ == '__main__':
    logfile = 'log/myDaemon_' + pid + '.log'
    formatter = logging.Formatter(...)
    handler = TimedCompressedRotatingFileHandler(os.path.join(daemon_home, logfile), when="Midnight", backupCount=10)
    handler.setFormatter(formatter)
    logger = logging.getLogger(__name__)
    logger.addHandler(handler)
    logger.setLevel(logging.INFO)

Опять же, все отлично работает при одном выполнении.Все, кроме входа в функцию обратного вызова, работает при двойном выполнении.Я не уверен, почему вход в функцию обратного вызова заблокирован, но вход в поток пульса (или основной) нет?Я попытался установить имя регистратора равным pid, чтобы сделать его уникальным, но я не думал, что это было необходимо, и все равно это не сработало.Погугливая, я видел разговоры об использовании queueHandlers, но не было ясно, как реализовать это с моим расширенным классом обработчиков.Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...