pythonselery:如果出现异常,则检索任务参数

2024-05-23 19:57:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

如果我有一堆任务,其中一个抛出,一个异常,有没有一种方法可以检索传递给所述任务的参数?在

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

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

。。。它可以引发异常,当异常发生时,有没有一种方法可以在调用之外获取hostname参数的值?在

假设我将任务分组如下:

^{pr2}$

最后一个(尝试解析failure.kommm)将引发异常。我想把celery任务的get()方法放在try/catch中,并显示一条消息,说明在试图解决问题时出现了问题失败.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])

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

提前谢谢你。在


Tags: 方法inipfor参数getdnsexception
1条回答
网友
1楼 · 发布于 2024-05-23 19:57:09

为此,可以使用abstract class来实现^{}处理程序。在

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)})

从文件中:

^{pr2}$

相关问题 更多 >