主要测试多线程效率与多线程的锁机制,详情见代码
#coding=utf-8
'''
Created on 2018年3月16日
@author: BH Wong
'''
'''
概念性知识:
(1) 全局锁:在任意规定的时间里,有且只有一个线程在运行。
(2) python 是线程安全的
(3) 多线程 复杂度较高,一个程序的复杂度在大部分情况下,只与代码行数有关。
代码 简单!=简陋
(4) 互斥锁 :lock acquire release
acquire之后必须要释放。
应用:
(1)数据库连接池,经典案例
流程:
(1) 加锁:
1.定义全局锁 mlock=threading.Lock()
2.在需要加锁的地方添加如下代码:
mlock.acquire() #加锁
需要执行的代码:打开文件之类的操作
mlock.release() #解锁
这里,加锁与解锁必须是一对儿。不然会死锁。
涉及模块:
(1) threading.Lock()
(2) time 时间模块在之前的博客中有详细说明。datatime可以代替time
time.time() 获取当前时间。
(3) python3中的range()是python2中的xrange(),保留了xrange()生成器的效果,废除了python2中的range()
'''
#(1) 测试线程安全
'''
import threading
num = 0
def test():
global num
num=num+1
print(num)
if __name__ == '__main__':
for i in range(10):
t=threading.Thread(target=test)
t.start()
'''
#(2)测试多线程效率
'''
import time
import threading
def a():
print('a start!')
time.sleep(2)
print('a end')
def b():
print('b start')
time.sleep(2)
print('b end')
start_time = time.time()
##1.顺序执行
a()
b()
##2.线程执行,时间缩短。提高效率。
t1=threading.Thread(target=a)
t2=threading.Thread(target=b)
t1.start()
t2.start()
t1.join()
t2.join()
end_time=time.time()
print(end_time-start_time)
'''
#3.加锁
import threading
mlock = threading.Lock()
def readFile(n):
print('#######这是线程:',n)
mlock.acquire()
with open('E:\\DEMO.txt','r') as f:
print(f.read())
mlock.release()
if __name__ == '__main__':
for i in range(10):
t=threading.Thread(target=readFile,args=[i])
t.start()
#join保证线程顺序执行的东西
t.join()