立即学习:https://edu.csdn.net/course/play/24458/296430?utm_source=blogtoedu
1.互斥锁:
多进程间的内存是相互隔离的,因此其数据也是相互隔离的,但是所有的进程都共享一个文件操作系统或者说共享文件处理器和打印端。而共享带来的是竞争,竞争带来的是混乱,而解决这种混乱则用到了互斥锁!实际上互斥锁的应用使得多进程按照串行的方式进行运行(串行可以通过互斥锁和join来实现,具体请看下一个学习笔记)
2.优劣势:
互斥锁保证了各进程间数据处理的有序性,避免了上述情况的混乱,但是使得一次只能有一个进程在运行,降低了运行效率。
3.关键知识点:
1)模块:multiprocessing和threading模块
2)Process类和Thread类
3)acquire()——获得锁,release()——释放锁
4.代码:
1)multiprocessing模块(进程锁)
from multiprocessing import Process,Lock
import timedef task(name,lock):lock.acquire()print('%s 1'%name)time.sleep(2)print('%s 2'%name)time.sleep(2)print('%s 3'%name)lock.release()if __name__ == '__main__':lock = Lock()for i in range(3):p = Process(target=task, args=('子进程%s'%i,lock))p.start()'''
E:\python3\venv2\venv\Scripts\python.exe C:/Users/jinlin/Desktop/python_further_study/并发编程/互斥锁.py
子进程0 1
子进程0 2
子进程0 3
子进程1 1
子进程1 2
子进程1 3
子进程2 1
子进程2 2
子进程2 3Process finished with exit code 0
'''
2)threading模块(线程锁)
import threading
import timedef task(name,lock):lock.acquire()print('%s 1'%name)time.sleep(2)print('%s 2'%name)time.sleep(2)print('%s 3'%name)lock.release()if __name__ == '__main__':lock = threading.Lock()for i in range(3):p = threading.Thread(target=task, args=('子进程%s'%i,lock))p.start()
注:具体看后面的学习笔记