我正在尝试调试 python 导入语句随机失败的错误,而其他时候它们运行干净。
这是我看到的例外的一个例子。有时我会看到这个,有时我会在不同的模块中看到另一个,尽管它似乎总是出现在 4 个模块之一中。
ERROR:root:/home/user/projecteat/django/contrib/auth/management/__init__.py:25: RuntimeWarning: Parent module 'django.contrib.auth.management' not found while handling absolute import
from django.contrib.contenttypes.models import ContentType
由于随机性,我几乎可以肯定这是一个线程问题,但我不明白为什么会出现导入错误,所以我不确定在调试中要寻找什么。如果不同的线程试图加载相同的模块,这可能是由文件系统争用引起的吗?
我正在尝试让 Django 1.4 的 LiveServerTestCase 在 Google App Engine 的开发服务器上运行。主线程运行 django 的测试框架。当它加载一个基于 LiveServerTestCase 的测试类时,它会生成一个子线程来启动 App Engine dev_appserver,它是一个本地网络服务器。主线程继续运行测试,使用 Selenium 驱动程序发出 HTTP 请求,这些请求由子线程上的 dev_appserver 处理。
在拆除测试用例类之前,测试框架可能会在基于 LiveServerTestCase 的类中运行一些测试。在拆卸时,子线程结束。
看起来异常发生在子(HTTP 服务器)线程中,主要是在单个测试用例类中的测试之间。
App Engine LiveServerTestCase 类的代码在这里:https ://github.com/dragonx/djangoappengine/blob/django-1.4/test.py
提供此问题所需的所有调试信息非常困难。我主要是在寻找关于为什么 python 导入语句会给出 RuntimeWarning 错误的建议。