日志允许在函数定义之外吗?

问题是,是否可以导入执行日志功能定义之外的模块,如下例所示:

# 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' blockn")
            import NON_EXISTENT_MODULE
            assert False
        except:
            sys.stderr.write("Great, your python language is workingn")
            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个错误,那么这些问题肯定是有保证的。

链接地址: http://www.djcxy.com/p/87053.html

上一篇: Is logging allowed outside of a function definition?

下一篇: Algorithm to detect overlapping periods