Python/Django 1.5 DatabaseWrapper 线程错误

Posted

技术标签:

【中文标题】Python/Django 1.5 DatabaseWrapper 线程错误【英文标题】:Python/Django 1.5 DatabaseWrapper thread error 【发布时间】:2013-04-19 16:53:57 【问题描述】:

当我运行服务器并尝试加载 Web 应用程序的本地版本时,在 Django 1.5.1(和 1.5.0)和 mysql 中引发以下 DatabaseError:

DatabaseError at /

在线程中创建的DatabaseWrapper 对象只能在该线程中使用 相同的线程。别名为“default”的对象是在线程 ID 中创建的 4365488128,这是线程 ID 140735183980896。

异常位置如下:

/Users/USERNAME/.envs/PROJECT_NAME/lib/python2.7/site-packages/django/db/backends/init.py 在 validate_thread_sharing 中,第 154 行

这只发生在第一个页面加载时。当我点击刷新时,Web 应用程序按预期加载。当我更改 Django/python 代码并且本地服务器需要重新验证时,错误返回。发生这种情况时,第一次加载会再次引发 DatabaseError,而后续加载再次不会。

这个问题只发生在我的 Django 1.5 项目中。我已经卸载了 mysql 并清除了位于 /usr/local/var/mysql 中的 mysql 二进制文件。全新安装 mysql 并没有解决这个问题。

此处讨论了类似的 DatabaseError,但我无法遵循他们的解决方案:

https://code.djangoproject.com/ticket/17998

我在这里不知所措,任何想法或专业知识将不胜感激。谢谢。

【问题讨论】:

你的代码使用线程吗? 我没有接触线程,不。基本的 Django 安装,基本的 MySQL 使用。 代码在哪个版本的 Django 下可以正常工作? 【参考方案1】:

我在导入 django.* 之前通过猴子补丁解决了这个问题:

import eventlet
eventlet.monkey_patch()

你比我理解这里使用线程。

【讨论】:

很遗憾没有为我工作。我从 eventlet.monkey_patch() 更改为 eventlet.monkey_patch(socket=True) 因为我不需要其他任何东西:***.com/a/22096841/5421745。 如果您正在编写自定义管理命令,“monkey_patch”需要进入您的 .manage.py 文件,或者它的副本。【参考方案2】:

这是针对1.4的,但是问题的原因可能和你的一样:

https://bitbucket.org/akoha/django-digest/issue/10/conflict-with-global-databasewrapper

该帖子中有两种可能的解决方案,尽管两者似乎都是解决方法:

“我已经能够通过在 db.py 中注释掉 close_connection 来解决问题”

“一个肯定会起作用的修复方法是用 django.db.connection 和 django.db.tranasction 替换 MultiDb/get_default_db()/self.db,如记录在:https://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly”

【讨论】:

以上是关于Python/Django 1.5 DatabaseWrapper 线程错误的主要内容,如果未能解决你的问题,请参考以下文章

raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Databas

断言失败: (SourceMgr && "SourceManager not set!") with oclint-json-compilation-databas

sql 查找SQL表大小。取得DB的表大小。来自http://stackoverflow.com/questions/7892334/get-size-of-all-tables-in-databas

python django怎么读

python django能开发大型网站吗

python django怎么添加css-CSDN论坛