Отправка писем с использованием Python - PullRequest
0 голосов
/ 03 июня 2019

Я работаю над проектом, который может отправлять массовые электронные письма. Я в настоящее время на 100 писем в 1:06 секунд. Я думаю, что это можно сделать быстрее, как за минуту или меньше. У вас есть предложения?

Я уже использовал многопоточность, но, конечно, "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 голосов
/ 03 июня 2019

Шаг 1. Узнайте, какая часть обработки занимает больше всего времени.

  • Это выборка данных из базы данных? 100 отдельных SELECTs можно сделать за 1 секунду с подходящим индексом и формулировкой запроса; давайте посмотрим на запрос. Выборка 100 строк за раз будет еще быстрее. Если «1:06» означает 66 секунд, то я предполагаю, что MySQL является , а не узким местом.

  • Если отправляется электронное письмо, мультиобработка может ( или не ) выполняться быстрее.

  • Может быть, с несколькими процессами, каждый из которых работает независимо (кроме случаев, когда они не попадают в одни и те же строки), будет проще и быстрее?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...