我正在为一个可以发送大量电子邮件的项目工作。我目前每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
答案 0 :(得分:0)
第1步。找出处理的哪个部分花费最多的时间。
是从数据库中获取数据吗? 1秒内可以使用适当的索引和查询公式完成100个单独的SELECTs
;让我们看看查询。一次获取100行将更快。如果“ 1:06”表示66秒,那么我建议MySQL 不是瓶颈。
是否正在发送电子邮件,然后多重处理可能会(或可能不会)运行得更快。
也许有多个进程,每个进程独立运行(除了不打相同的行)会更简单,更快吗?