【问题标题】:Launching celery tasks in cherrypy在cherrypy中启动芹菜任务
【发布时间】:2012-02-14 15:34:27
【问题描述】:

我正在使用cherrypy构建宁静的界面,我需要启动一些芹菜任务 但它似乎不起作用,我不知道为什么?

也许有人遇到过这种情况。

所以,我有 celeryconfig.py

CELERY_RESULT_BACKEND = "database"
CELERY_RESULT_DBURI = "sqlite:///celerydb.sqlite" 
CELERY_IMPORTS = ("tasks", ) 
CELERY_RESULT_ENGINE_OPTIONS = {"echo": True} 
BROKER_TRANSPORT = "sqlalchemy" 
BROKER_HOST = "sqlite:///celerydb.sqlite"

还有tasks.py

from celery.task import task

@task
def create_agent(agent_id):
    print ("do something")

我正在启动 celeryd

celeryd -l INFO     

我还有一个请求处理程序 (CherryPy)

class Resource(object):
    def POST(self):
        create_agent.delay(1)

我可以从 python 控制台调用 create_agent.delay(1) 任务,并且 celery worker 获取任务并开始工作 但是当在cherrypy中调用create_agent.delay(1)时(通过触摸适当的url) celery worker 根本没有接到任务。

还有更多。我用python3.2

【问题讨论】:

    标签: python celery cherrypy


    【解决方案1】:

    如果你在调试模式下运行 celeryd (celeryd -l debug),你应该得到一个提示:

    [2012-02-15 09:34:35,484: ERROR/MainProcess] 收到“default.create_agent”类型的未注册任务。 该消息已被忽略并丢弃。 你记得导入包含这个任务的模块吗? 或者,也许您正在使用相对进口? 请参阅 http://bit.ly/gLye1c 了解更多信息。

    (供将来参考,当您遇到此类问题时,请在 debug 模式下运行 celeryd;info 不会告诉您太多信息。)

    那个 bit.ly 网址指向这个: http://ask.github.com/celery/userguide/tasks.html#automatic-naming-and-relative-imports

    您应该能够通过将您的装饰器更改为以下内容来解决此错误: @task(name='tasks.create_agent')

    我正在运行 python 2.7 和 celery 2.3.1。我能够重现您的问题,并且上面的修复对我有用。

    希望对你有帮助。

    【讨论】:

    • 这是一个非常愚蠢的情况。我一直在启动celeryd -l info 命令,它是不包含 celeryconfig.py 文件的间接目录。我刚刚做了cd ./srcceleryd -l info,它就像一个魅力谢谢你的帮助。
    猜你喜欢
    • 2013-01-12
    • 2016-08-18
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2020-02-01
    • 2015-05-11
    • 2016-02-21
    相关资源
    最近更新 更多