在自定义Django管理命令

时间:2018-01-10 03:33:37

标签: 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。

1 个答案:

答案 0 :(得分:1)

在您的manage.py脚本中调用patch_all,noob。