python selenium T3
python selenium T3
既然要做自動,就得對得起自動化的這個名字。這一章我們將進一步的增加自動化測試的實用,增加
自動發郵件功能、多線程 和定時任務,讓我們的自動化工作真正變得高效而又強大起來。
?
EG1 :
with open('report.html' , 'r') as f:msg = MIMEText(f.read() , _subtype='html' , _charset='utf-8')msg['Subject'] = Header(subject, 'utf-8')msg['date'] = datetime.now().strftime('%Y-%m-%d %H-%M-%S')smtp = smtplib.SMTP()smtp.connect(smtpserver)smtp.login(username, password)smtp.sendmail(sender,receiver , msg.as_string())smtp.quit()
?
EG2:
每個進程都有自己的地址空間,內存,數據棧以及其它記錄其運行軌跡的輔助數據。操作系統管理在其上運行的所有進程,并為這些進程公平地分配時間。
?
線程(有時被稱為輕量級進程)跟進程有些相似,不同的是,所有的線程運行在同一個進程中,共享
相同的運行環境。我們可以想像成是在主進程或“主線程”中并行運行的“迷你進程”。
?
在單線程中順序執行兩個循環。一定要一個循環結束后,另一個才能開始。總時間是各個循環
運行時間之和
?
thread 提供了低級別的、原始的
線程以及一個簡單的鎖。threading 基于 Java 的線程模型設計。鎖(Lock)和條件變量(Condition)
在 Java 中是對象的基本行為(每一個對象都自帶了鎖和條件變量),而在 Python 中則是獨立的對象。
?
我們應該避免使用 thread 模塊,原因是它不支持守護線程。當主線程退出時,所有的子線程不論它
們是否還在工作,都會被強行退出。有時我們并不期望這種行為,這時就引入了守護線程的概念。 threading
模塊則支持守護線程。
join()會等到線程結束,或者在給了 timeout 參數的時候,等到超時為止。join()的另一個比較重
要的方面是它可以完全不用調用。一旦線程啟動后,就會一直運行,直到線程的函數結束,退出為止。
multiprocessing 使用類似于 threading 模塊的 API ,multiprocessing 提供了本地和遠程的并發性,有
效的通過全局解釋鎖(Global Interceptor Lock, GIL)來使用進程(而不是線程)。由于 GIL 的存在,在 CPU 密
集型的程序當中,使用多線程并不能有效地利用多核 CPU 的優勢,因為一個解釋器在同一時刻只會有一
個線程在執行。所以,multiprocessing 模塊可以充分的利用硬件的多處理器來進行工作。它支持 Unix 和
Windows 系統上的運行。
?
EG1:
from time import sleep, ctimedef loop0():print('start loop 0 at:', ctime())sleep(1)print('loop 0 done at:', ctime())def loop1():print('start loop 1 at:', ctime())sleep(1)print('loop 1 done at:', ctime())def main():print('start:', ctime())loop0()loop1()print('all end:', ctime())if __name__ == '__main__':main()
EG2:
import threading from time import sleep from datetime import datetimeloops = [2, 4]def loop(nloop , nsec):print('start loop ' , nloop , ' at : ' , datetime.now())sleep(nsec)print('end loop ' , nloop , ' at : ' , datetime.now())def main():print('start main ' , datetime.now())threads = []nloops = range(len(loops))for i in nloops :t = threading.Thread(target=loop , args=(i , loops[i]))threads.append(t)for i in nloops:threads[i].start() # 開啟線程for i in nloops:threads[i].join() # 等待線程終止print('end main ', datetime.now())if __name__ == '__main__':main()
EG3:
import threading from time import sleep from datetime import datetimeloops = [4, 2] format_date = '%Y-%m-%d-%H-%M-%S'class ThreadFunc(object):def __init__(self, func, args, name):self.name = nameself.func = funcself.args = argsdef __call__(self):apply(self.func , self.args)def loop(nloop , nsec):print('start loop ' , nloop , ' at : ' , datetime.now().strftime(format_date))sleep(nsec)print('end loop ' , nloop , ' at : ' , datetime.now().strftime(format_date))def main():print('start main ' , datetime.now())threads = []nloops = range(len(loops))for i in nloops:t = threading.Thread(target=ThreadFunc(loop , (i, loops[i]) , loop.__name__))threads.append(t)for i in nloops:threads[i].start()for i in nloops:threads[i].join()print('end main ' , datetime.now().strftime(format_date))if __name__ == '__main__':main()EG4:
?
轉載于:https://www.cnblogs.com/zsr0401/p/6489860.html
總結
以上是生活随笔為你收集整理的python selenium T3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电子沙盘技术和android,ERP沙盘
- 下一篇: MIT Kimera阅读笔记