介绍
这篇文章主要讲解了“python多线程并发的实例用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python多线程并发的实例用法”吧!
<强>单线程执行强>
python的内置模块提供了两个内置模块:线程和线程,线程是源生模块,线程是扩展模块,在线程的基础上进行了封装及改进,所以只需要使用线程这个模块就能完成并发的测试
<强>实例强>
创建并启动一个单线程
import 线程 def myTestFunc (): print(“我是一个函数“) 时间=t threading.Thread(目标=myTestFunc), #,创建一个线程 t.start(), #,启动线程
<强>执行结果强>
C: \ Python36 \ python.exe D:/MyThreading/myThread.py 我是一个线程函数 Process finished  with exit  code 0
其实单线程的执行结果和单独执行某一个或者某一组函数结果是一样的,区别只在于用线程的方式执行函数,而线程是可以同时执行多个的,函数是不可以同时执行的。
<强>多线程执行
强>
上面介绍了单线程如何使用,多线程只需要通过循环创建多个线程,并循环启动线程执行就可以了
<强>实例强>
import 线程 得到datetime import  datetime def thread_func(): #,线程函数 打印才能(& # 39;我是一个线程函数& # 39;,,datetime.now ()) def many_thread (): 时间=threads 才能;[] for 才能;_ 范围(10):拷贝,#,循环创建10个线程 ,,,t =, threading.Thread(目标=thread_func) ,,,threads.append (t) for 才能;t 线程:拷贝,#,循环启动10个线程 ,,,t.start () if __name__ ==, & # 39; __main__ # 39;: many_thread才能()
<强>执行结果强>
C: \ Python36 \ python.exe D:/MyThreading/manythread.py 我是一个线程函数,2019 - 06 - 23 16:54:58.205146 我是一个线程函数,2019 - 06 - 23 16:54:58.205146 我是一个线程函数,2019 - 06 - 23 16:54:58.206159 我是一个线程函数,2019 - 06 - 23 16:54:58.206159 我是一个线程函数,2019 - 06 - 23 16:54:58.206159 我是一个线程函数,2019 - 06 - 23 16:54:58.207139 我是一个线程函数,2019 - 06 - 23 16:54:58.207139 我是一个线程函数,2019 - 06 - 23 16:54:58.207139 我是一个线程函数,2019 - 06 - 23 16:54:58.208150 我是一个线程函数,2019 - 06 - 23 16:54:58.208150 Process finished  with exit  code 0
通过循环创建10个线程,并且执行了10次线程函数,但需要注意的是python的并发并非绝对意义上的同时处理,因为启动线程是通过循环启动的,还是有先后顺序的,通过执行结果的时间可以看出还是有细微的差异,但可以忽略不记。当然如果线程过多就会扩大这种差异。我们启动500个线程看下程序执行时间
<强>实例强>
import 线程 得到datetime import  datetime def thread_func(): #,线程函数 打印(& # 39;我是一个线程函数& # 39;,,datetime.now ()) def many_thread (): 时间=threads [] for _ 范围(500):拷贝,#,循环创建500个线程 时间=t threading.Thread(目标=thread_func) threads.append (t) for t 拷贝线程:#,循环启动500个线程 t.start () if __name__ ==, & # 39; __main__ # 39;: 时间=start datetime.today()()对应 many_thread () duration =, datetime.today()(),对应之处,开始 打印(持续时间)
<强>执行结果强>
0:00:00.111657 Process finished  with exit  code 0
500个线程共执行了大约0.11秒
那么针对这种问题我们该如何优化呢?我们可以创建25个线程,每个线程执行20次线程函数,这样在启动下一个线程的时候,上一个线程已经在循环执行了,这样就大大减少了并发的时间差异
<>强优化强>
import 线程 得到datetime import  datetime def thread_func(): #,线程函数 打印(& # 39;我是一个线程函数& # 39;,,datetime.now ()) def execute_func (): for _ 拷贝范围(20): thread_func () def many_thread (): 时间=start datetime.now () 时间=threads [] for _ 范围(25):拷贝,#,循环创建500个线程 时间=t threading.Thread(目标=execute_func) threads.append (t) for t 拷贝线程:#,循环启动500个线程 t.start () 时间=duration datetime.now(),背后,开始 打印(持续时间) if __name__ ==, & # 39; __main__ # 39;: many_thread ()python多线程并发的实例用法