繁体   English   中英

为什么__import__导致我的程序挂起?

[英]Why is __import__ causing my program to hang?

我正在使用默认python日志记录系统的python应用程序工作。 该系统的一部分是能够在日志记录配置文件中定义处理程序的功能。 此应用程序的处理程序之一是django管理员电子邮件处理程序“ django.utils.log.AdminEmailHandler”。 当应用程序初始化日志记录系统时,它会调用logging.config.fileconfig。 这是在后台线程上完成的,并尝试定期重新加载配置文件。 我相信这很重要。

我已经通过python日志记录源代码找到了该方法:

def _resolve(name):
    """Resolve a dotted name to a global object."""
    name = name.split('.')
    used = name.pop(0)
    found = __import__(used)
    for n in name:
        used = used + '.' + n
        try:
            found = getattr(found, n)
        except AttributeError:
            __import__(used)
            found = getattr(found, n)
    return found

在文件python2.7 / logging / config.py中

当给此函数参数“ django.utils.log.AdminEmailHandler”以创建该处理程序时,我的应用程序挂在命令上

__import__(used)

使用的是“ django”。

我进行了一些研究,发现一些提到__import__并不是线程安全的,并且避免在后台线程中使用它。 这个准确吗? 而且知道__import __(“ django”)确实会导致死锁,我有什么办法可以防止死锁?

我建议使用默认的Django LOGGING设置来控制日志记录。 为了进行开发,如果更改了任何文件(包括带有日志记录配置的设置文件),则使用manage.py runserver启动服务器将自动重新加载Django。 实际上,它运作良好!

https://docs.djangoproject.com/en/dev/topics/logging/#examples

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM