Разрешено ли ведение журнала вне определения функции?

Вопрос в том, правильно ли импортировать модуль, который выполняет ведение журнала вне определения функции, как в следующем примере:

# directly imported code (not within a function)
logging.basicConfig(filename='example.log',level=logging.DEBUG)
logging.info('Yay!')

Некоторый контекст необходим, чтобы понять мои опасения по поводу вышеуказанного кода. У меня есть простой модуль Module.py, который проверяет, может ли import генерировать исключение, когда модуль не существует.

# Module.py
import threading
import logging
import sys

class Thread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        global import_is_working
        try:
            sys.stderr.write("Yes, it got into the 'try' block\n")
            import NON_EXISTENT_MODULE
            assert False
        except:
            sys.stderr.write("Great, your python language is working\n")
            import_is_working = True
Thread().start()

# The following statements will block if "example.log" is a FIFO.
logging.basicConfig(filename='example.log',level=logging.DEBUG)
logging.info('Yay!')

Иногда мне нравится import приведенный выше код из другого модуля:

# Main.py
import Module

Сначала оба модуля работают:

max% python Module.py
Yes, it got into the 'try' block
Great, your python language is working
max% python Main.py
Yes, it got into the 'try' block
Great, your python language is working
max%

Но иногда я хочу войти в трубку, и это может быть блокировка. Удивительно, что это приводит к тому, что две версии ведут себя по-другому:

max% rm example.log 
max% mkfifo example.log
max% python Module.py
Yes, it got into the 'try' block
Great, your python language is working
^C
max% python Main.py 
Yes, it got into the 'try' block
^C

Итак, я немного разбираюсь в этом, и с некоторой помощью от других найду следующую строку слов в Документация по Python:

... импорт не должен иметь побочного эффекта, порождающего новый поток, а затем ожидающий этот поток каким-либо образом.

Эти слова, как я их обрезал выше, как представляется, определяют ограничение, которое объясняет проблему с моей программой выше.

Проблема заключается в том, что строка слов выше на самом деле не является целым предложением, в котором мы находим эти слова в документации Python. Фактически, все предложение:

Кроме основной программы, импорт не должен иметь побочного эффекта от нереста нового потока, а затем ждать этого потока.

Приведенный выше пример никогда не импортирует код нереста/ожидания, отличный от основной программы, Main.py. Следовательно, ограничение вообще не применяется!

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

Кроме основной программы, импорт не должен иметь побочного эффекта от нереста нового потока, а затем ждать этого потока.

когда реальность

Импорт (в любом месте) не должен иметь побочного эффекта от нереста нового потока, а затем ожидать каким-либо образом.

не так сильно отличается от того, чтобы говорить то же самое, если реальность была фактически

Импорт не должен ждать.

Регистрация может подождать. Безопасно ли для импортируемого кода выполнять ведение журнала?

Если да, то как мы можем доверять ему?

Если нет, как мы можем отлаживать импортированный код, который управляет данными? Или лучше всего делать тривиальные инициализации в импортированном коде, то есть вне определения функции?

Извините, что запросил текст спецификации, но если руководство настолько кратким и не содержит примеров и содержит хотя бы 1 ошибку, то вопросы, безусловно, заслуживают внимания.