【问题标题】:Setting CELERY_ALWAYS_EAGER to True throws Errors将 CELERY_ALWAYS_EAGER 设置为 True 会引发错误
【发布时间】:2013-07-16 22:00:40
【问题描述】:

我的代码中有一些异步调用。像这样:

send_message_to_install.delay(install, alert.message, badge, code,
                            campaign=alert.campaign, **kwargs)

我对返回任何结果不感兴趣,重要的是该函数在运行测试时同步执行 - 不会引发错误。

在测试时,我尝试将我的设置文件中的 CELERY_ALWAYS_EAGER 设置为 True:

if "test" in sys.argv:
    CELERY_ALWAYS_EAGER = True

我也尝试在测试中设置它:

from django.conf import settings
settings.CELERY_ALWAYS_EAGER = True

这两种尝试都使我的测试抛出错误(没有“.delay”它可以正常工作):

File "/opt/src/slicephone/cloud/users/api.py", line 520, in send_alert
campaign=alert.campaign, **kwargs)
File "/opt/virtenvs/django_slice/local/lib/python2.7/site-packages/celery/app/task.py", line 357, in delay
return self.apply_async(args, kwargs)
File "/opt/virtenvs/django_slice/local/lib/python2.7/site-packages/celery/app/task.py", line 463, in apply_async
options = router.route(options, self.name, args, kwargs)
File "/opt/virtenvs/django_slice/local/lib/python2.7/site-packages/celery/app/routes.py", line 44, in route
route = self.lookup_route(task, args, kwargs)
File "/opt/virtenvs/django_slice/local/lib/python2.7/site-packages/celery/app/routes.py", line 77, in lookup_route
return _first_route(self.routes, task, args, kwargs)
File "/opt/virtenvs/django_slice/local/lib/python2.7/site-packages/celery/utils/functional.py", line 196, in _matcher
answer = getattr(maybe_promise(obj), method)(*args, **kwargs)
File "/opt/virtenvs/django_slice/local/lib/python2.7/site-packages/kombu/utils/functional.py", line 50, in maybe_promise
return value.evaluate()
File "/opt/virtenvs/django_slice/local/lib/python2.7/site-packages/celery/utils/functional.py", line 162, in evaluate
self._value = super(mpromise, self).evaluate()
File "/opt/virtenvs/django_slice/local/lib/python2.7/site-packages/kombu/utils/functional.py", line 22, in evaluate
return self._fun(*self._args, **self._kwargs)
File "/opt/virtenvs/django_slice/local/lib/python2.7/site-packages/celery/utils/imports.py", line 48, in instantiate
return symbol_by_name(name)(*args, **kwargs)
File "/opt/virtenvs/django_slice/local/lib/python2.7/site-packages/kombu/utils/__init__.py", line 80, in symbol_by_name
module = imp(module_name, package=package, **kwargs)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)

ImportError: No module named tasks

谢谢,凯夫

【问题讨论】:

  • 你的send_message_to_install在哪里?

标签: python django celery django-celery


【解决方案1】:

我太傻了。我的 CELERY_ROUTES 中有一个“messages.tasks”。但是没有文件 /messages/tasks.py 。

【讨论】:

  • 感谢您的回帖!
【解决方案2】:

您可以使用CeleryTestRunner 进行测试。 它会自动在 ALWAYS_EAGER 模式下运行你的测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多