1

次の管理コマンド(website.py)があります

from __future__ import absolute_import
from django.core.management.base import BaseCommand


class Command(BaseCommand):

    def run_from_argv(self, argv):
        self._argv = argv
        self.execute()

    def handle(self, *args, **options):
        from scrapy.cmdline import execute
        execute(self._argv[1:])

次のURLからこのコマンドを実行したいと思います:/ crawl /update-now/ビューは次のとおりです。

from django.core import management

def update_index(request):
    management.call_command('website', 'crawl spider')

しかし、それは機能していません:

Command' object has no attribute '_argv'
4

1 に答える 1

1

run_from_argv問題は、内部の Django メソッドであり、django.core.management.ManagementUtility によって呼び出されることだと思います。また、自分で実装しないでください。self._argv はどこにも設定されていません。引数は、handle() で既に使用可能です。

そして、あなたのアプローチにはいくつかの欠点があります。

まず第一に、Django の同期の性質により、URL が「重い」場合、URL を取得して解析するのに多くの時間がかかる可能性があります。その代わりに、 Celeryをご覧になることを強くお勧めします。ビューからタスクを実行するより「正しい」方法であり、パフォーマンスに問題はありません。

于 2013-01-15T10:46:25.677 に答える