#python #python-3.x
#python #python-3.x
Вопрос:
Я настраиваю ведение журнала как
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s-%(levelname)s-%(process)d-%(processName)s- %(message)s')
logging.debug("Start of program")
def factorial(n):
logging.debug('Start of factorial(%s)' %(n))
total = 1
for i in range(n 1):
total *= i
logging.debug('i is ' str(i) ', toal is ' str(total))
logging.debug('End of factorial(%s)' %(n))
return total
print(factorial(10))
logging.debug("End of program")
Планируете отслеживать имя процесса и ProcessId,
К сожалению, он предоставляет мало полезной информации
$ python py_logging.py
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- Start of program
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- Start of factorial(10)
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- i is 0, toal is 0
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- i is 1, toal is 0
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- i is 2, toal is 0
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- i is 3, toal is 0
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- i is 4, toal is 0
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- i is 5, toal is 0
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- i is 6, toal is 0
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- i is 7, toal is 0
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- i is 8, toal is 0
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- i is 9, toal is 0
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- i is 10, toal is 0
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- End of factorial(10)
0
2019-03-20 23:11:15,014-DEBUG-12876-MainProcess- End of program
Что означает основной процесс?который не предоставляет никакой информации
Я предполагаю, что такая структура может быть полезной
2019-03-20 23:18:47,447-DEBUG-16076-MainProcess- Start of program
systemd,1 splash
`-systemd,2122 --user
`-code,3521
`-code,3539
`-code,3691
`-bash,16025
`-python,16076 py_logging.py
`-sh,16077 -c pstree -asp 16076
`-pstree,16078 -asp 16076
2019-03-20 23:18:47,493-DEBUG-16076-MainProcess- Start of factorial(10)
2019-03-20 23:18:47,493-DEBUG-16076-MainProcess- i is 0, toal is 0
2019-03-20 23:18:47,493-DEBUG-16076-MainProcess- i is 1, toal is 0
2019-03-20 23:18:47,493-DEBUG-16076-MainProcess- i is 2, toal is 0
2019-03-20 23:18:47,493-DEBUG-16076-MainProcess- i is 3, toal is 0
2019-03-20 23:18:47,493-DEBUG-16076-MainProcess- i is 4, toal is 0
2019-03-20 23:18:47,493-DEBUG-16076-MainProcess- i is 5, toal is 0
2019-03-20 23:18:47,493-DEBUG-16076-MainProcess- i is 6, toal is 0
2019-03-20 23:18:47,493-DEBUG-16076-MainProcess- i is 7, toal is 0
2019-03-20 23:18:47,493-DEBUG-16076-MainProcess- i is 8, toal is 0
2019-03-20 23:18:47,493-DEBUG-16076-MainProcess- i is 9, toal is 0
2019-03-20 23:18:47,493-DEBUG-16076-MainProcess- i is 10, toal is 0
2019-03-20 23:18:47,494-DEBUG-16076-MainProcess- End of factorial(10)
0
2019-03-20 23:18:47,494-DEBUG-16076-MainProcess- End of program
Как я мог понять основной процесс, основной для чего?
Комментарии:
1. Согласно docs.python.org/2/library/logging.html#logrecord-attributes , это имя процесса (если доступно), как называется ваша основная программа (с идентификатором 16076), если вы хотите отобразить имя модуля python, попробуйте %(module)s
2. Кажется, это имя процесса, когда вы используете модуль многопроцессорной обработки ( docs.python.org/2/library/multiprocessing.html )
Ответ №1:
processName
Атрибут извлекается с помощью multiprocessing.current_process().name
. Это "MainProcess"
для основного процесса (это все, что у вас будет, если вы не используете multiprocessing
модуль). Для дочерних процессов, запускаемых multiprocessing
, имя для нового процесса может быть указано при создании Process
объекта, и по умолчанию это будет «Process», за которым следуют некоторые цифры, которые зависят от того, сколько дочерних процессов вы создали.