Celery定时任务

本文简述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

至此,部署到服务器。
完。

展示图:

image

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

转载于:https://www.cnblogs.com/ldy-miss/p/9141850.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值