SMTP - 没有身份验证的快速可靠的连接探测?

时间:2016-08-30 15:37:36

标签: python smtp smtplib

简报

我目前正在构建一个python SMTP邮件发件人程序

我添加了一项功能,以便用户如果没有活动的互联网连接就无法登录,我尝试了许多解决方案/变体,以便尽可能快速地进行实时连接检查,有很多问题,如:

  1. 当我拔出以太网电缆时,连接处理程序运行的线程突然滞后(以测试它如何处理突然断开)
  2. 整个程序崩溃
  3. 程序检测到更改需要几秒钟
  4. 我目前的解决方案

    我设置了一个数据处理类,其中包含所有必要的信息(有效共享信息所需的模块)

    from root_gui import Root
    import threading
    from time import sleep
    from data_handler import DataHandler
    
    
    def handle_conn():
        DataHandler.try_connect()
        smtp_client.refresh() # Refreshes the gui according to the current status
    
    
    def conn_manager(): # Working pretty well
        while 'smtp_client' in globals():
            sleep(0.6) 
            try:
                handle_conn() # Calls the connection
            except NameError: # If the user quits the tkinter gui
                break
    
    
    smtp_client = Root()
    handle_conn()
    
    
    MyConnManager = threading.Thread(target=conn_manager)
    MyConnManager.start()
    smtp_client.mainloop()
    del smtp_client # The connection manager will detect this and stop running
    

    我在第二个线程上放了一个连接处理程序类,服务器连接进程在一个线程上全部放慢了gui的速度。

    {{1}}

    我的问题是:

    这是一种好的做法还是可怕的资源浪费?有没有更好的方法来做到这一点,因为无论我尝试什么,这是唯一有效的解决方案。

    据我所知, try_connect()函数每次运行时都会创建一个全新的smtp对象(一次只需0.6秒!

    资源/观察

    关于git的项目:https://github.com/cernyd/smtp_client

    观察:创建smtp对象时的 timeout 参数大大改善了响应时间,为什么会这样呢?

0 个答案:

没有答案