BH11-多线程02

主要测试多线程效率与多线程的锁机制,详情见代码

#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()
    
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值