python - 在自定义 Django 管理命令中使用 gevent

标签 python django sqlite gevent

我正在尝试使用 gevent 和 Django 管理命令创建一个 hello world。

from gevent import monkey
monkey.patch_all()

from django.core.management.base import BaseCommand


class Command(BaseCommand):
    # https://docs.djangoproject.com/en/1.11/howto/custom-management-commands/

    def add_arguments(self, parser):
        parser.add_argument(
            '--since',
            dest='since',
            type=int
        )

    def handle(self, *args, **options):
        self.stdout.write(str(options['since']))

无需尝试使用 gevent 或访问数据库,这给了我:

Traceback (most recent call last):
  File "./manage.py", line 24, in <module>
    execute_from_command_line(sys.argv)
  File "env/lib/python3.6/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "env/lib/python3.6/site-packages/django/core/management/__init__.py", line 355, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "env/lib/python3.6/site-packages/django/core/management/base.py", line 296, in run_from_argv
    connections.close_all()
  File "env/lib/python3.6/site-packages/django/db/utils.py", line 234, in close_all
    connection.close()
  File "env/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 221, in close
    self.validate_thread_sharing()
  File "env/lib/python3.6/site-packages/django/db/backends/base/base.py", line 542, in validate_thread_sharing
    % (self.alias, self._thread_ident, thread.get_ident())
django.db.utils.DatabaseError: DatabaseWrapper objects created in a thread can only be used in that same thread. The object with alias 'default' was created in thread id 140735610057536 and this is thread id 4446749960.

这是使用 Django 1.11.4 和 gevent 1.2.2。

最佳答案

把对 patch_all 的调用放在你的manage.py脚本中,你这个菜鸟。

关于python - 在自定义 Django 管理命令中使用 gevent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48179909/

相关文章:

python - 为什么 python 2 -> 3 中的 inspect.ismethod 和 inspect.isfunction 之间存在差异?

python - 如何将分数格式的英尺和英寸转换为小数?

python - django-form-designer 与 django-cms

python - lookup_field 在 Django get_queryset 中返回 None

sqlite - SQLite:“插入或替换”和仅“替换”之间的区别

Java SQLException 与 JDBC - SQLITE_MISUSE

php - 使用 SQLite3 数据库的 PHP 登录脚本的问题

python - 如何从 pandas 数据框创建 scipy 稀疏矩阵?

python - ipython 中是否有可能 "mute"单元格?

Django 多模板继承