У меня есть программа на 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, но не было ясно, как реализовать это с моим расширенным классом обработчиков.Любая помощь приветствуется.