前面一篇文章介绍了GIL,提到了锁,也介绍了,Python中执行代码,只能是一个线程执行,等这个线程暂停或者执行结束,才切换到第二个线程开始工作。今天就介绍锁的使用,通过一个例子来介绍。简单来说,我有两个线程,分别做job1和job2,我需要先完成job1,然后去完成job2。那么这个过程,我就需要先锁住线程1,等线程1完成了,我才去解锁,这样就开始做线程2的任务。
import threading
def job1():
global A, lock
# 开始插入一个锁标记,这个线程已经被锁住了
lock.acquire()
for i in range(10):
A += 1
print('job1', A)
# 等这个线程工作干完了,就释放锁,也就是解锁
lock.release()
def job2():
global A, lock
lock.acquire()
for i in range(10):
A += 5
print('job2', A)
lock.release()
def exampleFuc():
# 定义一个共享内存,全局变量
global A
A = 0
# 定义一个全局锁
global lock
lock = threading.Lock()
t1 = threading.Thread(target=job1)
t2 = threading.Thread(target=job2)
t1.start()
t2.start()
t1.join()
t2.join()
exampleFuc()
运行效果:
============= RESTART: C:\Users\Anthony\Desktop\thread_queue.py =============
job1 1
job1 2
job1 3
job1 4
job1 5
job1 6
job1 7
job1 8
job1 9
job1 10
job2 15
job2 20
job2 25
job2 30
job2 35
job2 40
job2 45
job2 50
job2 55
job2 60
>>>