怎样知道邮箱的端口_AllenNLP源码拓展——训练结束向邮箱发邮件
訓練模型時,不知道什么時候會結束(特別是設置了早停時),因此之前習慣過一會看一下狀況。所以前不久想到,如果添加代碼,在訓練結束后向自己的郵箱發送郵件,那不是很方便嘛。于是我嘗試在AllenNLP的源碼上添加發送郵件的代碼。
如果需要改寫源碼,不能直接用pip安裝,需要按照https://github.com/allenai/allennlp的Installing from source部分所說的方式進行安裝。
由于對python發送郵件不熟悉,我就直接使用了菜鳥教程上的代碼。
菜鳥教程——Python3 SMTP發送郵件——使用第三方 SMTP 服務發送
需要按照網站上的教程在自己的郵箱進行配置,我使用了 QQ 郵箱(你也可以使用 163,Gmail等)的 SMTP 服務。
添加代碼
位置allennlp.training.trainer
我在Trainer類后面加了一個函數sendEmail,Trainer的構造函數的參數最后添加一項email: List = None([‘郵箱’,‘配置郵箱SMTP時得到的密碼’]),傳進Trainer類self._email = email。
在def train(self)的最后,添加一行:
(這里我把train函數的返回值,包含一些訓練中得到的數據,作為郵件的內容)
# send Email after train self.sendEmail(str(metrics))sendEmail的參數msg是需要發送的文本。
def sendEmail(self, msg : str=None):import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrmy_sender = ""my_pass = ""my_user = ""#這里我為了方便自己使用,設置如果self._email為空,向自己的郵箱發送郵件if self._email == None: my_sender = '64XXXXX60@qq.com'my_pass = 'kybiXXXXXcbbjf' #這個號碼是配置郵箱SMTP時得到的my_user = '64XXXXX60@qq.com'elif len(self._email) == 2:my_sender = self._email[0] # 發件人郵箱賬號my_pass = self._email[1] # 發件人郵箱密碼my_user = self._email[0] # 收件人郵箱賬號,我這里發送給自己elif len(self._email) == 1:logger.info("lack email parameter! It consists of sender address and passward.")returnif msg == None:msg = "finish train"def mail():ret=Truetry:msgsend=MIMEText(msg,'plain','utf-8')msgsend['From']=formataddr(["wxy",my_sender]) # 括號里的對應發件人郵箱昵稱、發件人郵箱賬號msgsend['To']=formataddr(["name",my_user]) # 括號里的對應收件人郵箱昵稱、收件人郵箱賬號msgsend['Subject']="AllenNLP Result" # 郵件的主題,也可以說是標題server=smtplib.SMTP_SSL("smtp.qq.com", 465) # 發件人郵箱中的SMTP服務器,端口是25server.login(my_sender, my_pass) # 括號中對應的是發件人郵箱賬號、郵箱密碼server.sendmail(my_sender,[my_user,],msgsend.as_string()) # 括號中對應的是發件人郵箱賬號、收件人郵箱賬號、發送郵件server.quit() # 關閉連接except Exception: # 如果 try 中的語句沒有執行,則會執行下面的 ret=Falseret=Falsereturn retret=mail()if ret:logger.info("email successed")else:logger.info("email failed")這部分我提交到了我在Github上fork下來的倉庫。
其他
我沒有在讀取配置文件的地方加email這一項,因為懶。當然你也可以自己DIY一下,比如,發送其他你希望發送的信息,或者發送給別人的郵箱。
此外,這兩天在AllenNLP源碼上,完成了一個很使用的自動化訓練腳本,初步測試沒有問題。過一段時間進行更多測試,可以試一試提交給AllenNLP官方。
CSDN :https://blog.csdn.net/m0_38133212/article/details/88312689
總結
以上是生活随笔為你收集整理的怎样知道邮箱的端口_AllenNLP源码拓展——训练结束向邮箱发邮件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3306端口_Spring Boot随机
- 下一篇: kali启动cobaltstrike_C