首页 > 其他分享 >celery task 异常捕获的两种方式.(sentry, mail)

celery task 异常捕获的两种方式.(sentry, mail)

时间:2023-03-08 10:13:26浏览次数:44  
标签:task sentry celery import mail message

捕获celery task异常的两种方式, sentry, mail

sentry (sentry 记录异常.)
import sentry_sdk

from sentry_sdk.integrations.celery import CeleryIntegration


sentry_sdk.init(
    dsn="", # dsn地址.
    integrations=[CeleryIntegration()],

    # Set traces_sample_rate to 1.0 to capture 100%
    # of transactions for performance monitoring.
    # We recommend adjusting this value in production,
    traces_sample_rate=1.0,
)
mail (捕获异常, 发送邮件.)
import smtplib
import traceback

from email.header import Header
from email.mime.text import MIMEText


# 第三方 SMTP 服务
mail_host = ""  # 设置服务器
mail_user = ""  # 用户名
mail_pass = ""  # 密码

sender = ""
receivers = [""]  # 接收邮件, 设置邮箱


def celery_exception_decorator(task):

    def decorator(*args, **kwargs):
        try:
            task(*args, **kwargs)
        except Exception:
            celery_exception_trace_info(task.__name__, str(traceback.format_exc()))

    return decorator


def celery_exception_trace_info(name, info):
    message = MIMEText('{}: {}'.format(name, info), 'plain', 'utf-8')
    message['From'] = Header("CJ 运维组", 'utf-8')
    message['To'] = Header("CJ 开发组", 'utf-8')

    subject = 'celery 任务异常'
    message['Subject'] = Header(subject, 'utf-8')

    try:
        smtp_obj = smtplib.SMTP()
        smtp_obj.connect(mail_host, 25)  # 25 为 SMTP 端口号
        smtp_obj.login(mail_user, mail_pass)
        smtp_obj.sendmail(sender, receivers, message.as_string())
        print("邮件发送成功")
    except smtplib.SMTPException:
        print("Error: 无法发送邮件")

#### celery task 装饰器, 对任务进行装饰即可.

标签:task,sentry,celery,import,mail,message
From: https://www.cnblogs.com/dsdr/p/16952489.html

相关文章

  • 记- django通过celery beat results实现定时任务
    1.实验环境python版本:3.7.8django版本:3.2.15celery版本:5.2.7django-celery版本:3.2.1django-celery-beat版本:2.4.0django-celery-results版本:2.4.0django-redis版本......
  • Spring Task
    SpringTask定时任务1.主要内容 2.定时任务概述在项目中开发定时任务应该一种比较常见的需求,在Java中开发定时任务主要有三种解决方案:一是使用JDK自带的Timer......
  • C# 多线程(Thread和Task)
    C#多线程(Thread和Task)线程(Thread)是进程中的基本执行单元,是操作系统分配CPU时间的基本单位,一个进程可以包含若干个线程,在进程入口执行的第一个线程被视为这个进......
  • 这样在 C# 使用 LongRunnigTask 是错的
    Task.Factory.StartNew有一个重载,是支持TaskCreationOptions.LongRunning参数来指定Task的特征的。但是可能在没有注意的情况下,你就使用了错误的用法。那么本文我们来......
  • task7.c
    代码#include<stdio.h>#include<stdlib.h>intmain(){ intn; n=rand()%100-60+1+60; printf("n=%d\n",n); return0;}图片 ......
  • task6.c
    代码#include<stdio.h>intmain(){ intyear,s; longdoublek; s=1e+9; k=s/60/60/24/365; year=(int)(k+0.5); printf("十亿秒约等于%d年\n",year);......
  • task2.c
    源代码:#include<stdio.h>intmain(){intn,sum;scanf("%d",&n);sum=n*(n+1)/2;printf("sum=%d\n",sum);return0;}图片:结论:写法1与写法2可......
  • OpenMP task construct 实现原理以及源码分析
    OpenMPtaskconstruct实现原理以及源码分析前言在本篇文章当中主要给大家介绍在OpenMP当中task的实现原理,以及他调用的相关的库函数的具体实现。在本篇文章当中最......
  • task1.c
    task1.1源代码:#include<stdio.h>intmain(){printf("OO\n");printf("<H><H>\n");printf("IIII\n");return0;}图片:task1-2源代码:#inclu......
  • D. Hard Tasks【GDUT 2022 grade Qualifying】
    D.HardTasks原题链接题意给出一个数n,询问1-n中有多少对组合(三个数)相加不需要进位思路1-10有{0,1,2},{1,2,3},{2,3,4}共3对10-20有{10,11,12},{11,12,13},{12,13,......