为什么Celery在Python shell中工作,但在Django视图中不行? (进口问题) [英] Why does Celery work in Python shell, but not in my Django views? (import problem)

查看:110
本文介绍了为什么Celery在Python shell中工作,但在Django视图中不行? (进口问题)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

 来自芹菜的芹菜-Decorators导入任务
。任务导入任务

类提交者(任务):
def run(self,post,** kwargs):
return是的,它的作品!!!!!!

在此目录中,我还有一个名为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 )运行我的芹菜工作者,我尝试一下。
    我打开Python控制台并导入任务。然后,我运行提交者。

     >>>将fable.jobs.tasks导入任务
    >>> s = tasks.Submitter()
    >>> s.delay(abc)
    < AsyncResult:d70d9732-fb07-4cca-82be-d7912124a987>

    一切正常,您可以在我的控制台中看到

      [2011-01-09 17:30:05,766:INFO / MainProcess]任务任务。提交者[d70d9732-fb07-4cca-82be-d7912124a987]成功了0.0398268699646s:

    但是当我进入我的Django的views.py并运行上面的3行代码,得到这个:

      [2011-01-09 17:25:20,298:错误/ MainProcess]未知任务被忽略:任务:{'retries':0,'task':'fable.jobs.tasks.Submitter','args':('abc ',),'expires':无,'eta':无,'kwargs':{},'id':'eb5c65b4-f352-45c6-96f1-05d3a5329d53'} 
    追溯(最近的呼叫最后) :
    文件/home/myuser/mysite-env/lib/python2.6/site-packages/celery/worker/listener.py,第321行,在receive_message
    eventer = self.event_dispatcher)
    文件/ home / myuser / m ysite-env / lib / python2.6 / site-packages / celery / worker / job.py,第299行,from_message
    eta = eta,expires = expires)
    文件/ home / myuser /mysite-env/lib/python2.6/site-packages/celery/worker/job.py,第243行,__init__
    self.task = tasks [self.task_name]
    文件/ home / myuser / mysite-env / lib / python2.6 / site-packages / celery / registry.py,第63行,__getitem__
    raise self.NotRegistered(str(exc))
    NotRegistered: fable.jobs.tasks.Submitter的任务没有注册,请确保它已被导入。

    这是奇怪的,因为celeryd客户端确实显示它已注册,当我启动它。 >

      [2011-01-09 17:38:27,446:警告/ MainProcess] 
    配置 - >
    。经纪人 - > amqp:// GOGOme @ localhost:5672 / fablemq
    。队列 - >
    。芹菜 - >交换:芹菜(直接)绑定:芹菜
    。并发 - > 1
    。装载机 - > celery.loaders.default.Loader
    。日志文件 - > [stderr] @INFO
    。事件 - > OFF
    。节拍 - > OFF
    。任务 - >
    。 tasks.Decayer
    。任务。提交者

    有人可以帮助吗?

    解决方案

    我相信你的tasks.py文件需要在一个django应用程序(这是在settings.py中注册)才能导入。或者,您可以尝试从主项目或其中一个应用程序的 __ init __。py 文件导入任务。



    另请尝试从manage.py启动celeryd:

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

    -E -B 可能或可能不是必需的,但这是我使用的)。


    I installed Celery (latest stable version.) I have a directory called /home/myuser/fable/jobs. Inside this directory, I have a file called tasks.py:

    from celery.decorators import task
    from celery.task import Task
    
    class Submitter(Task):
        def run(self, post, **kwargs):
            return "Yes, it works!!!!!!"
    

    Inside this directory, I also have a file called celeryconfig.py:

    BROKER_HOST = "localhost"
    BROKER_PORT = 5672
    BROKER_USER = "abc"
    BROKER_PASSWORD = "xyz"
    BROKER_VHOST = "fablemq"
    
    CELERY_RESULT_BACKEND = "amqp"
    CELERY_IMPORTS = ("tasks", )
    

    In my /etc/profile, I have these set as my PYTHONPATH:

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

    So I run my Celery worker using the console ($ celeryd --loglevel=INFO), and I try it out. I open the Python console and import the tasks. Then, I run the Submitter.

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

    Everything works, as you can see in my console

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

    But when I go into my Django's views.py and run the exact 3 lines of code as above, I get this:

    [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."
    

    It's weird, because the celeryd client does show that it's registered, when I launch it.

    [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
    

    Can someone help?

    解决方案

    I believe your tasks.py file needs to be in a django app (that's registered in settings.py) in order to be imported. Alternatively, you might try importing the tasks from an __init__.py file in your main project or one of the apps.

    Also try starting celeryd from manage.py:

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

    (-E and -B may or may not be necessary, but that's what I use).

    这篇关于为什么Celery在Python shell中工作,但在Django视图中不行? (进口问题)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆