使用Python发送电子邮件

时间:2019-06-03 02:51:55

标签: python python-2.7 multiprocessing mariadb

我正在为一个可以发送大量电子邮件的项目工作。我目前每1:06秒收到100封电子邮件。我认为可以在一分钟或更短的时间内完成。你有什么建议吗?

我已经使用线程/多线程完成了,但是当然是“ GIL”。 我也从多处理中完成了。那就是我得到1:06秒和池1:07秒的地方

def sendMail(z,x,c):
    startti=datetime.datetime.now()
    server.sendmail(z,x,c)
    timenow= datetime.datetime.now()
    print (timenow-startti).total_seconds()

def multiprocessing_func(x):
    cursor.execute(query)
    starttime=datetime.datetime.now()
    while True:
        result=cursor.fetchone()
        if result==None:
            break
        subject=str(result[1])
        sendto=str(result[2])

        msg=MIMEMultipart('mixed')
        msg['from']=mail_sender
        msg['to']=sendto
        msg['subject']=subject

        part_text=MIMEText(html, 'html')
        msg.attach(part_text)
        msg.attach(file1)

        sendMail(msg['from'],msg['to'],msg.as_string())

    endtime=datetime.datetime.now()
    print'%s'%(endtime-starttime)
if __name__ == '__main__':
    processes=[]
    for i in range(1):
        p=multiprocessing.Process(target=multiprocessing_func, args=(i,))
        processes.append(p)
        p.start()
    for process in processes:
        process.join

1 个答案:

答案 0 :(得分:0)

第1步。找出处理的哪个部分花费最多的时间。

  • 是从数据库中获取数据吗? 1秒内可以使用适当的索引和查询公式完成100个单独的SELECTs;让我们看看查询。一次获取100行将更快。如果“ 1:06”表示66秒,那么我建议MySQL 不是瓶颈。

  • 是否正在发送电子邮件,然后多重处理可能会(或可能不会)运行得更快。

  • 也许有多个进程,每个进程独立运行(除了不打相同的行)会更简单,更快吗?