Я использую многопроцессорность Python.Я установил регистратор в родительском процессе, но я не могу просто унаследовать настройки журналирования родителя.
Я не беспокоюсь о смешивании журнала, поскольку я использую многопроцессорность не для одновременного выполнения заданий, а длядля контроля времени, поэтому одновременно выполняется только один подпроцесс.
Мой код без многопроцессорной обработки:
from multiprocessing import Process
import paramiko
import logging
import sys
def sftp_read():
# log.debug("Child process started") # This line will cause exception if it is run in sub process.
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
timeout = 60
ssh.connect('my_server', username='my_user', password='my_password', timeout=timeout, auth_timeout=timeout,
banner_timeout=timeout)
sftp = ssh.open_sftp()
fp = sftp.file('/home/my_user/my_file.txt')
lines = fp.readlines()
print ''.join(lines)
fp.close()
ssh.close()
def main():
sftp_read() # Call this function without multiprocessing
if __name__ == '__main__':
logging.basicConfig(stream=sys.stdout,
format='[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s')
log = logging.getLogger()
log.setLevel(logging.DEBUG)
main()
Приведенный выше код работает правильно, paramiko печатает журнал, как показано ниже:
[2018-11-20 10:38:45,051] {transport.py:1746} DEBUG - starting thread (client mode): 0x3052208L
[2018-11-20 10:38:45,051] {transport.py:1746} DEBUG - Local version/idstring: SSH-2.0-paramiko_2.4.2
[2018-11-20 10:38:45,405] {transport.py:1746} DEBUG - Remote version/idstring: SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.6
[2018-11-20 10:38:45,405] {transport.py:1746} INFO - Connected (version 2.0, client OpenSSH_7.2p2)
Но когда я изменяю основную функцию на следующий код для управления временем (ограничьте максимальное время чтения SFTP до 15 секунд):
def main():
# Use multiprocessing to limit the running time to at most 15 seconds.
p = Process(target=sftp_read)
try:
log.debug("About to start SSH")
p.start()
log.debug('Process started')
p.join(15)
finally:
if p.is_alive():
p.terminate()
log.debug('Terminated')
else:
log.debug("Finished normally")
Paramiko больше не печатаетжурнал.Теперь я хочу установить конфигурацию ведения журнала так же, как родительскую конфигурацию, как я могу это сделать?
Я не хочу, чтобы ответ велел мне снова получить регистратор, потому что на моем рабочем сервере естьглобальный параметр ведения журнала и может время от времени меняться, я не могу настроить свой собственный параметр ведения журнала, который не контролируется глобальным параметром.
Поэтому мне интересно, есть ли способ, позволяющий мне настроить мойНастройка ведения журнала подпроцесса как родительского.