zoukankan      html  css  js  c++  java
  • 10-邮件、多线程

    ★发邮件

    import smtplib,os
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    class SendMail(object):
    def __init__(self,username,passwd,recv,title,content,
    file=None,ssl=False,
    email_host='smtp.163.com',port=25,ssl_port=465):
    '''
    :param username: 用户名
    :param passwd: 密码
    :param recv: 收件人,多个要传list ['a@qq.com','b@qq.com]
    :param title: 邮件标题
    :param content: 邮件正文
    :param file: 附件路径,如果不在当前目录下,要写绝对路径,默认没有附件
    :param ssl: 是否安全链接,默认为普通
    :param email_host: smtp服务器地址,默认为163服务器
    :param port: 非安全链接端口,默认为25
    :param ssl_port: 安全链接端口,默认为465
    '''
    self.username = username #用户名
    self.passwd = passwd #密码
    self.recv = recv #收件人,多个要传list ['a@qq.com','b@qq.com]
    self.title = title #邮件标题
    self.content = content #邮件正文
    self.file = file #附件路径,如果不在当前目录下,要写绝对路径
    self.email_host = email_host #smtp服务器地址
    self.port = port #普通端口
    self.ssl = ssl #是否安全链接
    self.ssl_port = ssl_port #安全链接端口
    def send_mail(self):
    msg = MIMEMultipart()
    #发送内容的对象
    if self.file:#处理附件的
    file_name = os.path.split(self.file)[-1]#只取文件名,不取路径
    try:
    f = open(self.file, 'rb').read()
    except Exception as e:
    raise Exception('附件打不开!!!!')
    else:
    att = MIMEText(f,"base64", "utf-8")
    att["Content-Type"] = 'application/octet-stream'
    att["Content-Disposition"] = 'attachment; filename="%s"'%file_name
    msg.attach(att)
    msg.attach(MIMEText(self.content))#邮件正文的内容
    msg['Subject'] = self.title # 邮件主题
    msg['From'] = self.username # 发送者账号
    msg['To'] = ','.join(self.recv) # 接收者账号列表
    if self.ssl:
    self.smtp = smtplib.SMTP_SSL(self.email_host,port=self.ssl_port)
    else:
    self.smtp = smtplib.SMTP(self.email_host,port=self.port)
    #发送邮件服务器的对象
    self.smtp.login(self.username,self.passwd)
    try:
    self.smtp.sendmail(self.username,self.recv,msg.as_string())
    pass
    except Exception as e:
    print('出错了。。',e)
    else:
    print('发送成功!')
    self.smtp.quit()


    if __name__ == '__main__':
    m = SendMail(
    username='bjniuhanyang@corp.netease.com',
    passwd='bugaosuni',
    recv=['511402865@qq.com','564428155@qq.com'],
    title='新鞋的发送邮件',
    content='哈哈哈啊哈哈哈哈',
    file=r'C:UsersjniuhanyangDesktop221.png'
    )
    m.send_mail()
    import random
    import threading
    import time
    def axiba(name):
    j = random.randint(1,10)
    time.sleep(j)
    print('线程ID:',name,time.strftime('%H:%M:%S'),'执行时长:',j)
    for i in range(10):
    t = threading.Thread(target=axiba,args=(i,))
    t.start()
    import random
    import threading
    import time
    def axiba(name):
    j = random.randint(1,10)
    time.sleep(j)
    print('线程ID:',name,time.strftime('%H:%M:%S'),'执行时长:',j)
    for i in range(10):
    t = threading.Thread(target=axiba,args=(i,))
    t.start()
    import random
    import threading
    import time
    def axiba(name):
    j = random.randint(1,10)
    time.sleep(j)
    print('线程ID:',name,time.strftime('%H:%M:%S'),'执行时长:',j)
    for i in range(10):
    t = threading.Thread(target=axiba,args=(i,))
    t.start()

    ★面向对象
    修改父类的方法
    #x修改父类的构造方法
    #父类的构造方法,满足不了你现有的功能,你要在父类构造方法的基础上,添加新的功能。
    多态
    python里面是不支持多态。
    一种方法多种实现。
    class My(): #JAVA
    def make(name):
    print(name)
    def make(name,age):
    print(name,age)
    def make():
    print('哈哈笑')
    继承、
    封装、
    多态
    功能比较简单的情况下,你就定义个函数就行了
    一个功能比较复杂的,那你就用类,就更好些。

    import random
    import threading
    import time
    def axiba(name):
    j = random.randint(1,10)
    time.sleep(j)
    print('线程ID:',name,time.strftime('%H:%M:%S'),'执行时长:',j)
    for i in range(10):
    t = threading.Thread(target=axiba,args=(i,))
    t.start()

    ★多线程
    多个人给你干活。
    进程
    车间 车间 #进程
    工人 10 工人 10
    工人:线程
    一个进程里面至少得有一个线程。
    在多线程里面指定运行的那个函数返回值是获取不到的。
    线程
    CPU是几核的就代表cpu能同时处理几个任务。
    上下文切换
    python多线程是利用不了多核cpu的。
    GIL:全局解释器锁。
    多线程:
    io密集型任务用多线程比较快
    input
    output
    文件IO
    网络IO
    多进程:
    cpu密集型任务用多进程比较快

    import random
    import threading
    import time
    def axiba(name):
    j = random.randint(1,10)
    time.sleep(j)
    print('线程ID:',name,time.strftime('%H:%M:%S'),'执行时长:',j)
    for i in range(10):
    t = threading.Thread(target=axiba,args=(i,))
    t.start()
  • 相关阅读:
    EXP8
    EXP7
    数据库作业
    windows下如何编译运行龙脉代码
    CVE-2019-6340 Drupal8's REST RCE 漏洞复现
    小黄衫获奖感言
    Exp6 MSF应用基础
    Exp5
    实验一 密码引擎-4-国䀄算法交叉测试(选做)
    2020-2021-2 20175335 丹增罗布 《网络对抗技术》Exp1 PC平台逆向破解
  • 原文地址:https://www.cnblogs.com/sasalei/p/7994293.html
Copyright © 2011-2022 走看看