美文网首页
Celery定时任务案例——每天6点给自己发一条笑话和一套斗图

Celery定时任务案例——每天6点给自己发一条笑话和一套斗图

作者: 玩阿轲睡妲己 | 来源:发表于2018-06-05 20:51 被阅读0次

    (9.5更.. 厌倦了,任务停了)

    Celery定时任务,每天早上 6 点向手机邮箱发送一条笑话和一套斗图。

    涉及知识点:

    1. 简单爬虫
    2. 发送邮件
    3. Celery定时任务

    本项目 github : https://github.com/TimeAshore/Celery-QQTask

    Celery学习,请查看《Python异步任务之Celery》

    项目结构图:

    image

    __init__.py 文件实例化Celery

    #encoding: utf-8
    # Author: Timeashore
    
    from celery import Celery
    
    cele = Celery('demo')
    cele.config_from_object('celery_app.celeryconfig')
    

    celeryconfig.py 配置Celery

    #encoding: utf-8
    # Author: Timeashore
    
    from celery.schedules import crontab
    
    # Broker and Backend
    BROKER_URL = 'redis://127.0.0.1:6379'
    CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379'
    
    CELERY_TIMEZONE='Asia/Shanghai'    # 指定时区,不指定默认为 'UTC'
    # CELERY_TIMEZONE='UTC'
    
    # import
    CELERY_IMPORTS = (
        'celery_app.task1',
    )
    # schedules
    CELERYBEAT_SCHEDULE = {
        'multiply-at-some-time': {
            'task': 'celery_app.task1.send_email_image',
            'schedule': crontab(hour=6, minute=20),   # 每天早上 6 点 00 分执行一次
            'args': ()                                  # 任务函数参数
        }
    }
    

    task1.py 是定时任务文件,发送图片邮件部分代码:

    content = MIMEText(con + '''<html><body><table>
                                  <tr>
                                        <td><img src="cid:imageid1"></td><td><img src="cid:imageid3"></td>
                                   </tr>
                                  <tr>
                                        <td><img src="cid:imageid2"></td><td><img src="cid:imageid4"></td>
                                  </tr>
                                  <tr>
                                        <td><img src="cid:imageid5"></td><td><img src="cid:imageid7"></td>
                                   </tr>
                                  <tr>
                                        <td><img src="cid:imageid6"></td><td><img src="cid:imageid8"></td>
                                  </tr>
                            </table></body></html>''', 'html', 'utf-8')
        msg.attach(content)
        for x in range(1, 9):
            with open("{}.{}".format(x, point), "rb") as f:
                img_data = f.read()
            img = MIMEImage(img_data)
            img.add_header('Content-ID', 'imageid{}'.format(str(x)))
            msg.attach(img)
        try:
            s = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 邮件服务器及端口号
            s.login(msg_from, passwd)
            s.sendmail(msg_from, 收件人, msg.as_string())
            print u"发送成功"
        except Exception, e:
            print u"发送失败", e.message
        finally:
            s.quit()
    

    邮件使用 QQ 邮箱,前提需要开启账户 POP3 和 IMAP , 具体设置请看项目代码。

    执行

    1,在celery_app同级目录下,启动Celery worker 进程

    celery -A celery_app worker --loglevel=info
    

    启动成功如下图:

    image

    2,在celery_app同级目录下,开启定时任务,周期性的把 task 发送到 Broker

    celery beat -A celery_app
    

    如下图:

    image

    至此,把项目部署到服务器。每天 6 点都会收到一封邮件,包括一条笑话和最新一套斗图图片,可以把朋友邮件添加在程序的收件人列表中。

    展示图:

    image

    同样的,按照这个思路,可以很简单的实现天气预报实时通知。

    相关文章

      网友评论

          本文标题:Celery定时任务案例——每天6点给自己发一条笑话和一套斗图

          本文链接:https://www.haomeiwen.com/subject/cbwmsftx.html