相关疑难解决方法(0)

为什么Celery在Python shell中工作,但在我的Django视图中却没有?(进口问题)

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

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

class Submitter(Task):
    def run(self, post, **kwargs):
        return "Yes, it works!!!!!!"
Run Code Online (Sandbox Code Playgroud)

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

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

CELERY_RESULT_BACKEND = "amqp"
CELERY_IMPORTS = ("tasks", )
Run Code Online (Sandbox Code Playgroud)

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

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

所以我使用console($ celeryd --loglevel=INFO)运行我的Celery工作器,然后尝试一下.我打开Python控制台并导入任务.然后,我运行提交者.

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

一切正常,正如您在我的控制台中看到的那样

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

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

[2011-01-09 17:25:20,298: ERROR/MainProcess] Unknown …
Run Code Online (Sandbox Code Playgroud)

python unix django import celery

14
推荐指数
3
解决办法
1万
查看次数

如何在 Celery link_error 回调中获取“完整”异步结果

我有 Celery 3.1.18 与 Django 1.6.11 和 RabbitMQ 3.5.4 一起运行,并尝试在失败状态下测试我的异步任务(CELERY_ALWAYS_EAGER=True)。但是,我无法在错误回调中获得正确的“结果”。Celery 文档中的示例显示:

@app.task(bind=True)
def error_handler(self, uuid):
    result = self.app.AsyncResult(uuid)
    print('Task {0} raised exception: {1!r}\n{2!r}'.format(
          uuid, result.result, result.traceback))
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我的结果仍然是“PENDING”、result.result = ''result.traceback=''。但我的调用返回的实际结果.apply_async具有正确的“FAILURE”状态和回溯。

我的代码(基本上是一个 Django Rest Framework RESTful 端点,它解析 .tar.gz 文件,然后在文件解析完成后向用户发送通知):

视图.py:

from producer_main.celery import app as celery_app

@celery_app.task()
def _upload_error_simple(uuid):
    print uuid
    result = celery_app.AsyncResult(uuid)
    print result.backend
    print result.state
    print result.result
    print result.traceback
    msg = 'Task {0} raised exception: {1!r}\n{2!r}'.format(uuid,
                                                           result.result,
                                                           result.traceback)


class UploadNewFile(APIView):
    def …
Run Code Online (Sandbox Code Playgroud)

django celery

4
推荐指数
1
解决办法
5512
查看次数

标签 统计

celery ×2

django ×2

import ×1

python ×1

unix ×1