Python芹菜:如果存在';这是个例外

Python芹菜:如果存在';这是个例外,python,exception-handling,celery,Python,Exception Handling,Celery,我开始学习芹菜和蟒蛇,我有一个问题可能很简单,但我似乎找不到任何合适的答案 如果我有一堆任务,其中一个抛出一个异常,有没有方法检索传递给该任务的参数 例如,如果我想将一些主机名解析为IP,并创建一个任务 @tasks_app.task def resolve_hostname(hostname): return (hostname, {hst.address for hst in dns.resolver.query(hostname)}) 。。。它会引发异常,当异常发生时,是否有方法

我开始学习芹菜和蟒蛇,我有一个问题可能很简单,但我似乎找不到任何合适的答案

如果我有一堆任务,其中一个抛出一个异常,有没有方法检索传递给该任务的参数

例如,如果我想将一些主机名解析为IP,并创建一个任务

@tasks_app.task
def resolve_hostname(hostname):
    return (hostname, {hst.address for hst in dns.resolver.query(hostname)})
。。。它会引发异常,当异常发生时,是否有方法在调用外部获取该
hostname
参数的值

假设我将任务分组如下:

ip_subtasks = group(
    resolve_hostname.s(hostname) for hostname in ['google.com',
                                                  'yahoo.com',
                                                  'failure.kommm']
)()
最后一个(尝试解决
故障.kommm
)将引发异常。我想将芹菜任务的
get()
方法放在
try/catch
中,并显示一条消息,说明在尝试解决故障时出现了问题。kommm(如下所示):

所以,这就是问题所在。。。如果我有任务实例本身,是否有方法检索执行任务时使用的参数

提前感谢。

要做到这一点,您可以使用来实现处理程序

从文档中:

on_failure(self, exc, task_id, args, kwargs, einfo)

Parameters: 
  exc     – The exception raised by the task.
  task_id – Unique id of the failed task.
  args    – Original arguments for the task that failed.
  kwargs  – Original keyword arguments for the task that failed.
  einfo   – ExceptionInfo instance, containing the traceback.

你有没有看过一个故障处理程序?我有,我认为它会起作用,但我不知道如何使用它,当任务是通过如上所示的装饰器创建的(正如我所说,我是芹菜新手)查看上面的部分,它向您展示了如何使用抽象类实现这一点。on_failure不会捕获TimeLimitException。链接到on_failure的文档后面的文档部分描述了如何使用自定义请求来处理预分叉工作人员的on_timeout。否则,这应该由您在任务本身中处理。on_失败(在任务和请求中)和on_超时之间有什么区别?
from celery import Task

class DebugTask(Task):
    abstract = True

    def on_failure(self, exc, task_id, args, kwargs, einfo):
        logger.exception("Something happened when trying"
                         " to resolve %s" % args[0])

@tasks_app.task(base=DebugTask)
def resolve_hostname(hostname):
    return (hostname, {hst.address for hst in dns.resolver.query(hostname)})
on_failure(self, exc, task_id, args, kwargs, einfo)

Parameters: 
  exc     – The exception raised by the task.
  task_id – Unique id of the failed task.
  args    – Original arguments for the task that failed.
  kwargs  – Original keyword arguments for the task that failed.
  einfo   – ExceptionInfo instance, containing the traceback.