相关疑难解决方法(0)

Django Celery教程没有返回结果

UDATE3:发现了这个问题.请参阅以下答案.

UPDATE2:似乎我可能通过manage.py shell运行djcelery教程来处理自动命名和相对导入问题,见下文.它仍然不适合我,但现在我收到新的日志错误消息.见下文.

更新:我在帖子的底部添加了日志.似乎示例任务没有注册?

原帖:

我想让django-芹菜起来跑步.我无法通过这个例子.

我成功安装了rabbitmq,并且没有遇到任何麻烦:http://www.rabbitmq.com/getstarted.html

然后我尝试通过djcelery教程.

当我运行时,python manage.py celeryd -l info我收到消息:[任务] - app.module.add [2011-07-27 21:17:19,990:警告/主程序]芹菜@sequoia已经启动.

所以看起来不错.我把它放在我的设置文件的顶部:

import djcelery
djcelery.setup_loader()

BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"
Run Code Online (Sandbox Code Playgroud)

将这些添加到我安装的应用中:

'djcelery',
Run Code Online (Sandbox Code Playgroud)

这是我的app的tasks文件夹中的tasks.py文件:

from celery.task import task

@task()
def add(x, y):
    return x + y
Run Code Online (Sandbox Code Playgroud)

我把它添加到我的django.wsgi文件中:

os.environ["CELERY_LOADER"] = "django"
Run Code Online (Sandbox Code Playgroud)

然后我在命令行输入了这个:

>>> from app.module.tasks import add
>>> result = add.delay(4,4)
>>> result
(AsyncResult: 7auathu945gry48- a bunch of stuff) …
Run Code Online (Sandbox Code Playgroud)

python django rabbitmq celery

11
推荐指数
1
解决办法
8007
查看次数

Python celery:如果有异常,则检索任务参数

我开始使用Celery和Python,我有一个问题可能非常简单,但我似乎无法找到任何合适的答案......

如果我有一堆任务,并且其中一个抛出异常,是否有办法检索传递给所述任务的参数?

例如,如果我想获取一些主机名解析的IP,我创建一个任务......

@tasks_app.task
def resolve_hostname(hostname):
    return (hostname, {hst.address for hst in dns.resolver.query(hostname)})
Run Code Online (Sandbox Code Playgroud)

...可以抛出异常,是否有一种方法可以在hostname异常发生时将该参数的值置于调用之外?

假设我将任务分组如下:

ip_subtasks = group(
    resolve_hostname.s(hostname) for hostname in ['google.com',
                                                  'yahoo.com',
                                                  'failure.kommm']
)()
Run Code Online (Sandbox Code Playgroud)

最后一个(试图解决failure.kommm)将引发异常.我想get()将芹菜任务的方法放在一个try/catch,并在尝试解决failure.kommm(如下所示)显示一条消息说出现问题:

for ip_subtask in ip_subtasks:
    try:
        hostname, ips = ip_subtask.get(timeout=45)
    except dns.exception.DNSException, e:
        # I WISHED THIS WORKED:
        logger.exception("Something happened when trying"
                         " to resolve %s" % ip_subtask.args[0])
Run Code Online (Sandbox Code Playgroud)

所以,这就是问题......如果我有任务实例本身,有没有办法检索任务执行的参数?

先感谢您.

python exception-handling celery

9
推荐指数
1
解决办法
2905
查看次数

芹菜错误:result.get超时

我已经安装了Celery,并且正在尝试使用Celery First Steps Doc对其进行测试。

我尝试将Redis和RabbitMQ都用作代理和后端,但无法获得结果:

result.get(timeout = 10)
Run Code Online (Sandbox Code Playgroud)

每次,我都会收到此错误:

  Traceback (most recent call last):
  File "<input>", line 11, in <module>
  File "/home/mehdi/.virtualenvs/python3/lib/python3.4/site-packages/celery/result.py", line 169, in get
    no_ack=no_ack,
  File "/home/mehdi/.virtualenvs/python3/lib/python3.4/site-packages/celery/backends/base.py", line 225, in wait_for
    raise TimeoutError('The operation timed out.')
celery.exceptions.TimeoutError: The operation timed out.
Run Code Online (Sandbox Code Playgroud)

经纪人部分似乎工作得很好:当我运行这段代码时

from celery import Celery

app = Celery('tasks', backend='redis://localhost/', broker='amqp://')

@app.task
def add(x, y):
    return x + y

result = add.delay(4,4)
Run Code Online (Sandbox Code Playgroud)

我得到了(按预期)

[2015-08-04 12:05:44,910:INFO / MainProcess]收到的任务:tasks.add [741160b8-cb7b-4e63-93c3-f5e43f8f8a02]

[2015-08-04 12:05:44,911:INFO / MainProcess]任务task.add [741160b8-cb7b-4e63-93c3-f5e43f8f8a02]成功0.0004287530000510742s:8

PS:我正在使用Xubuntu 64bit

编辑: …

python linux rabbitmq redis celery

4
推荐指数
2
解决办法
3530
查看次数

标签 统计

celery ×3

python ×3

rabbitmq ×2

django ×1

exception-handling ×1

linux ×1

redis ×1