当前位置: 首页 > 面试题库 >

为什么Celery可以在Python Shell中工作,但不能在Django视图中工作?(导入问题)

衡子琪
2023-03-14
问题内容

我安装了Celery(最新的稳定版本)。我有一个名为的目录/home/myuser/fable/jobs。在此目录中,我有一个名为task.py的文件:

from celery.decorators import task
from celery.task import Task

class Submitter(Task):
    def run(self, post, **kwargs):
        return "Yes, it works!!!!!!"

在此目录中,我还有一个名为celeryconfig.py的文件:

BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "abc"
BROKER_PASSWORD = "xyz"
BROKER_VHOST = "fablemq"

CELERY_RESULT_BACKEND = "amqp"
CELERY_IMPORTS = ("tasks", )

在我的中/etc/profile,我将这些设置为我的PYTHONPATH:

  • PYTHONPATH=/home/myuser/fable:/home/myuser/fable/jobs

因此,我使用控制台($ celeryd --loglevel=INFO)运行Celery worker
,然后尝试一下。我打开Python控制台并导入任务。然后,我运行提交者。

>>> import fable.jobs.tasks as tasks
>>> s = tasks.Submitter()
>>> s.delay("abc")
<AsyncResult: d70d9732-fb07-4cca-82be-d7912124a987>

一切正常,如您在控制台中所见

[2011-01-09 17:30:05,766: INFO/MainProcess] Task tasks.Submitter[d70d9732-fb07-4cca-82be-d7912124a987] succeeded in 0.0398268699646s:

但是,当我进入Django的views.py并运行上述精确的3行代码时,我得到了:

[2011-01-09 17:25:20,298: ERROR/MainProcess] Unknown task ignored: "Task of kind 'fable.jobs.tasks.Submitter' is not registered, please make sure it's imported.": {'retries': 0, 'task': 'fable.jobs.tasks.Submitter', 'args': ('abc',), 'expires': None, 'eta': None, 'kwargs': {}, 'id': 'eb5c65b4-f352-45c6-96f1-05d3a5329d53'}
Traceback (most recent call last):
  File "/home/myuser/mysite-env/lib/python2.6/site-packages/celery/worker/listener.py", line 321, in receive_message
    eventer=self.event_dispatcher)
  File "/home/myuser/mysite-env/lib/python2.6/site-packages/celery/worker/job.py", line 299, in from_message
    eta=eta, expires=expires)
  File "/home/myuser/mysite-env/lib/python2.6/site-packages/celery/worker/job.py", line 243, in __init__
    self.task = tasks[self.task_name]
  File "/home/myuser/mysite-env/lib/python2.6/site-packages/celery/registry.py", line 63, in __getitem__
    raise self.NotRegistered(str(exc))
NotRegistered: "Task of kind 'fable.jobs.tasks.Submitter' is not registered, please make sure it's imported."

这很奇怪,因为当我启动celeryd客户端时,确实会显示它已注册。

[2011-01-09 17:38:27,446: WARNING/MainProcess]  
Configuration ->
    . broker -> amqp://GOGOme@localhost:5672/fablemq
    . queues ->
        . celery -> exchange:celery (direct) binding:celery
    . concurrency -> 1
    . loader -> celery.loaders.default.Loader
    . logfile -> [stderr]@INFO
    . events -> OFF
    . beat -> OFF
    . tasks ->
        . tasks.Decayer
        . tasks.Submitter

有人可以帮忙吗?


问题答案:

我相信您的task.py文件需要在django应用中(已在settings.py中注册)才能导入。或者,您可以尝试从__init__.py主项目或应用程序之一中的文件导入任务。

还可以尝试从manage.py启动celeryd:

$ python manage.py celeryd -E -B -lDEBUG

-E并且-B可能有必要也可能没有必要,但这就是我所使用的)。



 类似资料:
  • 几天来,我一直在用头撞这个,完全被难倒了。下面是纲要: 我有一个Eclipse插件项目,使用Tycho通过Maven 3构建 在Maven中,我已经设置了maven-jarsigner-plugin来使用我的keystore对jars进行签名(有关keystore的详细信息,请参阅下文) 我的密钥库里有个Thawte签名的代码签名证书 我可以从目标/*中获取任何签名的jar文件,并在上面运行“ja

  • 问题内容: 已解决:问题是Wingware Python IDE。我想现在自然而然的问题是,这是怎么可能的以及如何解决。 昨天我问了一个问题Python中的multiprocessing.Pool问题,这个问题几乎相同,但是我发现它似乎可以在Windows计算机上运行,​​而不能在我的Ubuntu上运行。在本文的结尾,我将发布执行相同功能的代码的稍有不同的版本。 我的问题的简短摘要:在Python

  • 我试图使用Ubuntu 16.04在亚马逊AWS上部署我的Django项目。我正在运行python版本2.7.12和Django 1.10.5。我创建了名为venv的虚拟环境,然后激活了它。我得到这个错误,当我试图运行pythonmanage.pyrunserver。 Traceback(最近一次调用最后一次):文件"manage.py",第17行,在"不能导入Django。你确定它安装和"重要错

  • 在ipython中 但是在python中: 为什么会发生这个奇怪的错误?请帮我弄清楚。

  • 我能够登录我的本地(和远程服务器)与以下curl(我用Postman生成)...我可以登录成功使用另一个API客户端(Rest)与我试图在Postman中使用相同的参数/头/体。我已经关闭了SSL证书验证和发送邮递员令牌头设置(每其他堆栈溢出答案)... 卷曲: Curl-X POST\http://localhost:8080/api/user/login\-H'接受:应用程序/json'\-H

  • 我试图做一个文件上传到一个链接(共享点Rest服务),在chrome浏览器中工作良好,但不是在android WebView。 我知道android webview有很多限制,但我尝试使用以下方法上传一个文件 https://github.com/mgks/os-fileup 它打开浏览器,但它不显示文件名,也不上传任何内容或调用服务,但同样的代码在chrome浏览器中运行良好(请注意,我已经启用

  • 正在更新属性文件:/home/mehmet/works/netbeansprojects/hsm_java/build/built-clean.属性删除目录/home/mehmet/works/netbeansprojects/hsm_java/build 清洁: 初始化: 已创建目录:/home///netbeansprojects/hsm_java/build/empty 已创建目录:/hom

  • 这就是我正在做的。 部署此应用程序在 jboss 中失败,因为它在 tomcat 中部署,并且像 charm 一样工作。 我使用来自eclipse的动态web应用程序作为项目源。 将项目导出到war文件并在jboss服务器中部署也不起作用。 web.xml: Spring.xml: 控制器: 和 JBOSS 中的错误: