语法
多线程工作在单进程下。在多线程模式下,数据变量是被所有线程共享的。
1.创建线程
import threading
def runFunc1(a):
for i in range(10):
print('func1' ,int(a) + i)
def runFunc2(b):
for i in range(4):
print('func2',int(b) + i)
if __name__ == '__main__':
# 创建线程1
t1 = threading.Thread(target=runFunc1, args=(2,))
# 创建线程2
t2 = threading.Thread(target=runFunc2, args=(4,))
# 开启线程1
t1.start()
# 开启线程2
t2.start()
# 阻塞主线程
t1.join()
t2.join()
# 控制台输出:
"""
func1 2
func1 3
func1 4
func1 5
func2 4
func1 6
func2 5
func1 7
func2 6
func1 8
func2 7
func1 9
func1 10
func1 11
"""
当两个处理函数同时操作一个变量时,要使用线程锁。
- 获取锁:lock.acquire()
- 释放锁:lock.release()
- 使用 try……finally ,在finally中处理释放锁
线程锁的好处
- 确保了某段关键代码只能由一个线程从头到尾完整地执行,
线程锁的坏处
- 首先是阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程模式执行,效率就大大地下降了。
- 由于可以存在多个锁,不同的线程持有不同的锁,并试图获取对方持有的锁时,可能会造成死锁,导致多个线程全部挂起,既不能执行,也无法结束,只能靠操作系统强制终止。
网友评论