2017-02-03 4 views
1

Ich muss eine Menge E-Mails, Tausende von E-Mails überprüfen. Ich benutze smtplib, um es zu tun, und ich habe ein Problem. Es dauert zu viel Zeit (obwohl ich Multiprocessing und wie üblich 32 Prozesse verwende). Und manchmal habe ich einen Fehler bei einer E-Mail (Timeout) oder einen anderen Fehler und ich nehme kein Ergebnis dafür. Aber wenn ich es erneut ausführe, erhalte ich keinen Fehler, aber kann Fehler für eine andere E-Mail bekommen. Was mache ich falsch in meinem Code und wie kann ich das verbessern, um mehr Genauigkeit und weniger Fehler zu haben?Python: wie check E-Mails mit smtplib schneller

def check_email(email, mxRecord): 
      time.sleep(2) 
      host = socket.gethostname() 
      try: 
       server = smtplib.SMTP() 
       server.set_debuglevel(0) 
       addressToVerify = email 
       server.connect(mxRecord) 
       server.helo(host) 
       server.mail('[email protected]') 
       code, message = server.rcpt(str(addressToVerify)) 
       server.quit() 
       if code == 250: 
        res_email = email 
        res = str(num) + ' ' + str(res_email) 
        print res 
        return res 
       else: 
        continue 
      except: 
       continue 

Antwort

0

Sie nur Schleife throu alle E-Mails auf dem gleichen Einsatz Threading Zeit ...

def check_email(email, mxRecord): 
     time.sleep(2) 
     host = socket.gethostname() 
     for line, line 1 in itertools.izip(email, mxRecord) 
      try: 
       server = smtplib.SMTP() 
       server.set_debuglevel(0) 
       addressToVerify = email 
       server.connect(mxRecord) 
       server.helo(host) 
       server.mail('[email protected]') 
       code, message = server.rcpt(str(addressToVerify)) 
       server.quit() 
       if code == 250: 
         res_email = email 
         res = str(num) + ' ' + str(res_email) 
         print res 
         return res 
       else: 
        continue 
       except: 
        continue 

m = threading.Thread(name='daemon', target=check_email(email,mxRecord)) 
m.setDaemon(True) 
m.start() 

sould so aussehen

+0

Was 'Name = 'daemon'? –

+0

die deamon von theading do import threading ein deamon wird gestartet, um jede e-mail zu prüfen, mxRecord – minime

+0

Ich benutze 'multiprocessing' um parallel zu arbeiten. Oder ist es etwas anderes? –