我目前正在构建一个python SMTP邮件发件人程序。
我添加了一项功能,以便用户如果没有活动的互联网连接就无法登录,我尝试了许多解决方案/变体,以便尽可能快速地进行实时连接检查,有很多问题,如:
我设置了一个数据处理类,其中包含所有必要的信息(有效共享信息所需的模块)
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 参数大大改善了响应时间,为什么会这样呢?