[Python 进阶] 互斥锁

#!/usr/bin/env Python3
# -*- coding: utf-8 -*-
# @Software: PyCharm
# @virtualenv:workon
# @contact: 1040691703@qq.com
# @Desc:Code descripton
__author__ = '未昔/AngelFate'
__date__ = '2020/5/31 20:24'

from threading import Thread, Lock  # 导入互斥锁Lock

num = 0

def work():
    global num
    l.acquire()  # 这里表示调用互斥锁上锁方法,如果work函数先运行l.acquire的话,那么后边的程序就不能再修改和使用变量num。直到将其解锁后才能使用。
    for i in range(1000000):
        num += 1
    print('work的num是%d' % num)
    l.release()  # 这里表示调用互斥锁解锁方法。


def works():
    global num
    l.acquire()  # 这里表示调用互斥锁上锁方法。
    for i in range(1000000):
        num += 1
    print('works的num是%d' % num)
    l.release()  # 这里表示调用互斥锁解锁方法。


l = Lock()  # 实例化互斥锁,互斥锁是为了保护子线程不争抢数据而使用的一个类。
t = Thread(target=work)
tt = Thread(target=works)
t.start()
tt.start()
print('最后的num值是%d' % num)  # 输出最后的结果
这里需要明白,主线程和子线程是同时进行的,因为创建子进程在前,最后输出再后,所以当最后线程输出的时候,子线程还在运行.
最后的num值是271556
work的num是1000000
works的num是2000000

Process finished with exit code 0

[Python 进阶] 互斥锁