我正在为一个可以发送批量电子邮件的项目工作。我目前每 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 步。 了解处理的哪个部分花费的时间最多。
是从数据库中获取数据吗? 1秒内完成100个单独的
SELECTs
,具有合适的索引和查询公式;让我们看看查询。 一次获取 100 行会更快。 如果"1:06"意味着66秒,那么我认为MySQL不是瓶颈。它是否发出电子邮件,那么多处理可能会(或可能不会(运行得更快。
也许有多个进程,每个进程独立运行(除了不点击相同的行(会更简单、更快?