[英]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.