(9.5更.. 厭倦了郭宝,任務(wù)停了)
Celery定時(shí)任務(wù)荠割,每天早上 6 點(diǎn)向手機(jī)郵箱發(fā)送一條笑話(huà)和一套斗圖瞻惋。
涉及知識(shí)點(diǎn):
- 簡(jiǎn)單爬蟲(chóng)
- 發(fā)送郵件
- Celery定時(shí)任務(wù)
本項(xiàng)目 github : https://github.com/TimeAshore/Celery-QQTask
Celery學(xué)習(xí)小染,請(qǐng)查看《Python異步任務(wù)之Celery》
項(xiàng)目結(jié)構(gòu)圖:
image
__init__.py
文件實(shí)例化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' # 指定時(shí)區(qū),不指定默認(rèn)為 '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 點(diǎn) 00 分執(zhí)行一次
'args': () # 任務(wù)函數(shù)參數(shù)
}
}
task1.py 是定時(shí)任務(wù)文件箱舞,發(fā)送圖片郵件部分代碼:
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) # 郵件服務(wù)器及端口號(hào)
s.login(msg_from, passwd)
s.sendmail(msg_from, 收件人, msg.as_string())
print u"發(fā)送成功"
except Exception, e:
print u"發(fā)送失敗", e.message
finally:
s.quit()
郵件使用 QQ 郵箱遍坟,前提需要開(kāi)啟賬戶(hù) POP3 和 IMAP , 具體設(shè)置請(qǐng)看項(xiàng)目代碼。
執(zhí)行
1晴股,在celery_app同級(jí)目錄下愿伴,啟動(dòng)Celery worker 進(jìn)程
celery -A celery_app worker --loglevel=info
啟動(dòng)成功如下圖:
image
2,在celery_app同級(jí)目錄下队魏,開(kāi)啟定時(shí)任務(wù)公般,周期性的把 task 發(fā)送到 Broker
celery beat -A celery_app
如下圖:
image
至此,把項(xiàng)目部署到服務(wù)器胡桨。每天 6 點(diǎn)都會(huì)收到一封郵件官帘,包括一條笑話(huà)和最新一套斗圖圖片,可以把朋友郵件添加在程序的收件人列表中昧谊。
展示圖:
image
同樣的刽虹,按照這個(gè)思路,可以很簡(jiǎn)單的實(shí)現(xiàn)天氣預(yù)報(bào)實(shí)時(shí)通知呢诬。