主域名进入网站,深圳注册公司流程和费用,软件开发网站开发,网站开发的著作权归谁python selenium T3 既然要做自动,就得对得起自动化的这个名字。这一章我们将进一步的增加自动化测试的实用,增加自动发邮件功能、多线程 和定时任务,让我们的自动化工作真正变得高效而又强大起来。 EG1 : with open(report.html , r) as f:msg MIMEText(f.read() , _subtypeh…python selenium T3 既然要做自动,就得对得起自动化的这个名字。这一章我们将进一步的增加自动化测试的实用,增加自动发邮件功能、多线程 和定时任务,让我们的自动化工作真正变得高效而又强大起来。 EG1 : with open(report.html , r) as f:msg MIMEText(f.read() , _subtypehtml , _charsetutf-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(targetloop , 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-%Sclass 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(targetThreadFunc(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