【问题标题】:Celery-Django: Unable to execute tasks asynchronouslyCelery-Django:无法异步执行任务
【发布时间】:2011-11-22 06:43:42
【问题描述】:

我试图在用户浏览我的网站时在后台运行一些任务,但是每当我使用 Celery 调用函数时,它似乎是同步执行的,而不是异步执行的。

例如,当我调用 function.delay() 时,整个站点都会挂起,直到 function.delay() 返回。以类似方式调用函数的其他方法(apply_async、子任务)也存在同样的问题。

我猜 Django 或 Celery 中的某些东西配置错误,但我不知道它是什么。

settings.py 中的 Celery 配置:

import djcelery
djcelery.setup_loader()

CELERY_RESULT_BACKEND = "amqp"
CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"
BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "test"
BROKER_PASSWORD = "test"
BROKER_VHOST = "testhost"

TEST_RUNNER = "djcelery.contrib.test_runner.run_tests"

CELERY_IMPORTS = ("myapp.tasks",)

BROKER_BACKEND = "memory"
CELERY_ALWAYS_EAGER = True

尝试使用“./manage.py celeryd”启动 Celery 守护进程,我得到以下输出:

[2011-09-23 09:25:38,026: WARNING/MainProcess]  

 -------------- celery@iMac.local v2.2.7
---- **** -----
--- * ***  * -- [Configuration]
-- * - **** ---   . broker:      memory://test@localhost:5672/testhost
- ** ----------   . loader:      djcelery.loaders.DjangoLoader
- ** ----------   . logfile:     [stderr]@WARNING
- ** ----------   . concurrency: 4
- ** ----------   . events:      OFF
- *** --- * ---   . beat:        OFF
-- ******* ----
--- ***** ----- [Queues]
 --------------   . celery:      exchange:celery (direct) binding:celery


[2011-09-23 09:25:38,035: WARNING/MainProcess] celery@iMac.local has started.

【问题讨论】:

  • 你使用的是什么网络服务器?
  • 我目前正在使用默认的 Django 设置运行本地主机。计划一开始就使用 Apache。
  • 嗯,然后提供您的 celery 相关配置,并告诉我们您如何启动 celery deamon。
  • 我不完全确定这些配置设置的作用。几周前,这个项目在半工作状态下被丢在了我的腿上(我事先没有使用 Django、Celery 甚至 Python 的经验)。我现在才开始发现一些不太正常的东西。

标签: python django celery


【解决方案1】:

尝试删除

CELERY_ALWAYS_EAGER = True

您明确要求 celery 同步执行任务。它会一直等待结果。 此设置对于编写单元测试等很有用。

阅读http://ask.github.com/celery/configuration.html

【讨论】:

    猜你喜欢
    • 2016-12-13
    • 2016-09-28
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 2020-07-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多