Python Huey任务队列句柄仅在最后一次重试时出错&;检索异常回溯

Python Huey任务队列句柄仅在最后一次重试时出错&;检索异常回溯,python,django,python-huey,Python,Django,Python Huey,目前,在mytasks.py中设置此代码段,以便在任务失败时,通过huey向Django项目的管理员发送电子邮件: from django.core.mail import mail_admins from huey import signals from huey.contrib import djhuey as huey @huey.signal(signals.SIGNAL_ERROR) def task_error(signal, task, exc): subject =

目前,在my
tasks.py中设置此代码段,以便在任务失败时,通过
huey
向Django项目的管理员发送电子邮件:

from django.core.mail import mail_admins

from huey import signals
from huey.contrib import djhuey as huey


@huey.signal(signals.SIGNAL_ERROR)
def task_error(signal, task, exc):
    subject = f'Task [{task.name}] failed
    message = f"""Task ID: {task.id}'
Args: {task.args}
Kwargs: {task.kwargs}
Exception: {exc}"""
    mail_admins(subject, message)
这将导致以下(示例)电子邮件主题

[Django] Task [test_task] failed
和机构:

Task ID: 89e4bfb3-3cd3-4d6f-8693-68874caf21ec
Args: (123,)
Kwargs: {}
Exception: division by zero
这是相当圆滑,但。。。问题:

  • 现在,每当任务失败(包括重试)时都会触发此操作。我希望它只在所有重试失败的情况下发送。因此,如果一个任务有
    retries=2
    ,我现在会收到3封电子邮件(原始错误+2次重试)。如何让它仅在上次重试时发送电子邮件
  • 是否有办法打印异常的
    exc
    回溯
  • 另外,我尝试通过Django项目日志设置它,但是这种方法提供了更细粒度的控制,所以我对它很满意

    更新 基于@Adam Chainz和@coleifer的答案(均正确)更新的模块现在看起来像:

    import traceback
    
    from django.core.mail import mail_admins
    
    from huey import signals
    from huey.contrib import djhuey as huey
    
    
    @huey.signal(signals.SIGNAL_ERROR)
    def task_error(signal, task, exc):
        if task.retries > 0:
            return
        subject = f'Task [{task.name}] failed'
        message = f"""Task ID: {task.id}
    Args: {task.args}
    Kwargs: {task.kwargs}
    Exception: {exc}
    {traceback.format_exc()}"""
        mail_admins(subject, message)
    
    见:

    既然您有任务实例,您应该能够检查
    retries==0

    一种更标准的方法是将日志级别错误的电子邮件处理程序附加到huey consumer logger。这就是我的处理方法。

    请参阅:

    既然您有任务实例,您应该能够检查
    retries==0


    一种更标准的方法是将日志级别错误的电子邮件处理程序附加到huey consumer logger。这就是我处理它的方式。

    第1页。我想您可以检查任务。重试


    二号。在1上使用?

    。我想您可以检查任务。重试


    二号。使用?

    谢谢@coleifer。我确实将
    邮件管理员
    附加到了“huey consumer logger”
    huey.consumer
    。然而,这基本上“吞噬”了所有其他类型的日志级别;例如,在本地运行
    manage.py run\u huey
    时不显示输出。谢谢@coleifer。我确实将
    邮件管理员
    附加到了“huey consumer logger”
    huey.consumer
    。然而,这基本上“吞噬”了所有其他类型的日志级别;例如,在本地运行
    manage.py run\u huey
    时不显示输出。