Python实现定时任务利器之apscheduler使用详解
1. 什么是apscheduler?
apscheduler
是一个Python定时任务框架,可以执行周期执行或定期执行的任务。它有四种执行器可供选择:BlockingScheduler
(同步执行)、BackgroundScheduler
(异步执行)、AsyncIOScheduler
(异步I/O)和GeventScheduler
(协程)。
2. 安装apscheduler
使用pip安装apscheduler
pip install apscheduler
3. 示例1:定时打印时间
在这个示例中,我们创建了一个函数print_time
来打印当前时间,然后使用BackgroundScheduler
每隔3秒钟执行一次该函数。
from apscheduler.schedulers.background import BackgroundScheduler
import time
def print_time():
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
scheduler = BackgroundScheduler()
scheduler.add_job(print_time, 'interval', seconds=3)
scheduler.start()
while True:
time.sleep(1)
解释一下上面代码的实现方式:
- 我们引入了
BackgroundScheduler
,使用这个执行器来执行我们的任务。 print_time()
函数定义了我们的任务,它打印当前时间。scheduler.add_job()
方法添加了我们要执行的任务,第一个参数是函数名,第二个参数是执行方式(可以是interval、date、cron、或者一次性的),第三个参数是执行频率或者时间点,本示例中每隔3秒钟执行一次。- 最后,我们使用
scheduler.start()
启动调度器,并在结束前通过while True:
保持主线程存活。
4. 示例2:定时发送邮件
在这个示例中,我们演示了如何使用apscheduler
发送定时邮件。在下面的示例代码中,我们使用了一个类SendMail
,它从邮件配置中读取信息并使用SMTP_SSL
发送邮件。我们创建一个新的BackgroundScheduler
并添加一个新的任务。
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from apscheduler.schedulers.background import BackgroundScheduler
import time
class SendMail:
def __init__(self, subject, text, from_email, from_password, to_email, smtp_server='smtp.163.com', smtp_port=465):
self.subject = subject
self.text = text
self.from_email = from_email
self.from_password = from_password
self.to_email = to_email
self.smtp_server = smtp_server
self.smtp_port = smtp_port
def send_mail(self):
try:
msg = MIMEMultipart()
msg['From'] = self.from_email
msg['To'] = self.to_email
msg['Subject'] = self.subject
msg.attach(MIMEText(self.text))
# attach image
img = 'image.jpg'
with open(img, 'rb') as f:
img_data = f.read()
image = MIMEImage(img_data)
msg.attach(image)
# send email
server = smtplib.SMTP_SSL(self.smtp_server, self.smtp_port)
server.login(self.from_email, self.from_password)
server.sendmail(self.from_email, self.to_email, msg.as_string())
server.quit()
print("邮件发送成功")
except Exception as e:
print("邮件发送失败,错误信息:%s" % str(e))
if __name__ == '__main__':
sender = SendMail('这是一封测试邮件', '您收到这份邮件说明发送成功', 'xxx@163.com', 'xxxxxx', 'xxx@qq.com')
scheduler = BackgroundScheduler()
scheduler.add_job(sender.send_mail, 'interval', seconds=5)
scheduler.start()
while True:
time.sleep(1)
解释一下上面代码的实现方式:
- 我们使用了SMTP发送邮件的方式,需要注意正确配置相关信息,包括发件人邮箱、密码、收件人邮箱、SMTP服务器地址和端口等。
- 我们创建了一个名为
SendMail
的类,它包含必要的信息和逻辑以发送电子邮件。 sender.send_mail()
方法被调度器定期执行,它创建一个新的MIMEMultipart
邮件,并将图片、文本等作为附件添加到邮件中。此外,发件人邮箱、收件人邮箱、主题和正文等也在此过程中被设置。- 最后,我们使用
scheduler.start()
启动调度器,并在结束前通过while True:
保持主线程存活。
这两个示例演示了如何使用apscheduler
来执行定时任务,你可以根据自己的需要进行相应的修改。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现定时任务利器之apscheduler使用详解 - Python技术站