定义:当使用多进程进行文件读写时,如果一个进程为读文件另一个为写文件,则两者无法同事进行,必须要先执行写操作然后进行读操作,并且有多个线程共享资源时,只能有一个进程进行访问,这样就需要一个锁的机制。
设计实例:
运行两个线程一个对数字加一,一个对数据加三:
当不加锁时:
def add(nu,value,lock):
 print ("init add {0} number {1}".format(value, nu))
    with lock:
        for i in xrange(1, 6):
            time.sleep(2)
            nu += value
            print ("add {0} number {1}".format(value, nu))

if __name__=="__main__":
    lock=multiprocessing.Lock()
    nu=0
    p1=multiprocessing.Process(target=add,args=(nu,1,lock))
    p2 = multiprocessing.Process(target=add, args=(nu, 3, lock))
    p1.start()
    p2.start()

 

结果:
C:\Python27\python.exe E:/untitled/Mutil/M3.py
init add 1 number 0
init add 3 number 0
add 1 number 1
add 3 number 3
add 1 number 2
add 3 number 6
add 1 number 3
add 3 number 9
add 1 number 4
add 3 number 12
add 1 number 5
add 3 number 15

Process finished with exit code 0
加锁后:
def add(nu,value,lock):
#----加锁后:
    print ("init add {0} number {1}".format(value, nu))
    lock.acquire()
    try:
       for i in xrange(1, 6):
           time.sleep(2)
           nu+=value
           print (" add {0} number {1}".format(value, nu))
    except Exception as e:
        raise e
    finally:
        lock.release()
C:\Python27\python.exe E:/untitled/Mutil/M3.py
init add 1 number 0
init add 3 number 0
 add 1 number 1
 add 1 number 2
 add 1 number 3
 add 1 number 4
 add 1 number 5
 add 3 number 3
 add 3 number 6
 add 3 number 9
 add 3 number 12
 add 3 number 15
 
发现不是之前的一同运行而是谁抢到锁的权限谁就先执行后者再执行。
 
关于共享内存:
顾名思义由两个或者两个以上线程一同操作的空间。
import multiprocessing
import time


def add(nu,value,lock):
#----加锁后:
    print ("init add {0} number {1}".format(value, nu.value))
    lock.acquire()
    try:
       for i in xrange(1, 6):
           time.sleep(2)
           nu.value+=value
           print (" add {0} number {1}".format(value, nu.value))
    except Exception as e:
        raise e
    finally:
        lock.release()
if __name__=="__main__":
    lock=multiprocessing.Lock()
    nu=multiprocessing.Value('i',0)
    p1=multiprocessing.Process(target=add,args=(nu,1,lock))
    p2 = multiprocessing.Process(target=add, args=(nu, 3, lock))
    p1.start()
    p2.start()
C:\Python27\python.exe E:/untitled/Mutil/M4.py
init add 1 number 0
init add 3 number 0
 add 1 number 1
 add 1 number 2
 add 1 number 3
 add 1 number 4
 add 1 number 5
 add 3 number 8
 add 3 number 11
 add 3 number 14
 add 3 number 17
 add 3 number 20

Process finished with exit code 0

用上可知通过加锁两个线程依次执行并且结果保留。