首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用djcelery抓取网站并填充django模型

使用djcelery抓取网站并填充django模型
EN

Stack Overflow用户
提问于 2010-12-29 17:32:35
回答 2查看 1K关注 0票数 0

我很难让芹菜和django合作。我想使用芹菜刮一个网站,并更新一些django模型每20分钟。

我在我的app目录中创建了一个任务文件,其中包含一个update类:

代码语言:javascript
复制
class Update(PeriodicTask):
    run_every=datetime.timedelta(minutes=20)

    def run(self, **kwargs):
        #update models

如果我从命令行运行modesl,该类将正确地更新它:

代码语言:javascript
复制
if __name__ == '__main__':
    Update().run()

我在setting.py中的芹菜配置如下所示:

代码语言:javascript
复制
CELERY_RESULT_BACKEND = "database"
BROKER_HOST = 'localhost'
BROKER_PORT = 5672
BROKER_USER = 'Broker'
BROKER_PASSWORD = '*password*'
BROKER_VHOST = 'broker_vhost'

但是,当我运行manage.py celeryd -v 2时,我会得到连接错误:

代码语言:javascript
复制
[2010-12-29 09:28:15,150: ERROR/MainProcess] CarrotListener: Connection Error: [Errno 111] Connection refused. Trying again in 10 seconds...

我遗漏了什么?

更新:

我发现了姜戈-科姆布,它看起来很不错,因为它使用了我现有的数据库。我已经安装了django-kombu和kombu,但是现在我在运行manage.py celeryd -v 2时得到了以下错误。

代码语言:javascript
复制
Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "<webapp_path>/lib/python2.6/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "<webapp_path>/lib/python2.6/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "<webapp_path>/lib/python2.6/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "<webapp_path>/lib/python2.6/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "<webapp_path>/lib/python2.6/django_celery-2.1.4-py2.6.egg/djcelery/management/commands/celeryd.py", line 20, in handle
    worker.run(*args, **options)
  File "<webapp_path>/lib/python2.6/celery-2.1.4-py2.6.egg/celery/bin/celeryd.py", line 83, in run
    from celery.apps.worker import Worker
  File "<webapp_path>/lib/python2.6/celery-2.1.4-py2.6.egg/celery/apps/worker.py", line 15, in <module>
    from celery.task import discard_all
  File "<webapp_path>/lib/python2.6/celery-2.1.4-py2.6.egg/celery/task/__init__.py", line 7, in <module>
    from celery.execute import apply_async
  File "<webapp_path>/lib/python2.6/celery-2.1.4-py2.6.egg/celery/execute/__init__.py", line 7, in <module>
    from celery.result import AsyncResult, EagerResult
  File "<webapp_path>/lib/python2.6/celery-2.1.4-py2.6.egg/celery/result.py", line 9, in <module>
    from celery.backends import default_backend
  File "<webapp_path>/lib/python2.6/celery-2.1.4-py2.6.egg/celery/backends/__init__.py", line 51, in <module>
    default_backend = DefaultBackend()
TypeError: __init__() takes exactly 2 arguments (1 given)
EN

回答 2

Stack Overflow用户

发布于 2010-12-30 02:14:42

看起来您没有安装/运行代理(RabbitMQ?)

票数 1
EN

Stack Overflow用户

发布于 2012-06-12 19:39:26

我也有同样的问题,问题是我错了导入路径。

可能,您将任务导入为

from celery import task

而你应该

from celery.task import task

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4556299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档