进程锁:
- 为什么要有进程锁:假如现在有一台打印机,qq要使用打印机,word文档也要使用打印机,如果没有使用进程锁,可能会导致一些问题,比如QQ的任务打印到一半,Word插进来,于是打印出来的结果是各自一半。
- 进程锁的创建与使用:
- 1.导入模块,from multiprocessing import Lock
- 2.创建锁对象:lock=Lock()
- 3.在需要锁的地方:lock.acquire()
- 4.在释放的地方:lock.release()
from multiprocessing import Lock,Process def f(l,num): l.acquire() try: print("printer used done",num) finally: l.release() if __name__ == "__main__": lock=Lock() for num in range(10): Process(target=f, args=(lock,num)).start()
以后遇到更好的例子再做补充。
信号量:
- 信号量可以限制进入的进程的数量。
- 如何使用信号量:
- 创建信号量对象:信号量对象=multiprocessing.BoundedSemaphore(x),x是限制进程的数量
- 当有进程需要进入的时候,调用acquire()来减少信号量:信号量对象.acquire()
- 当有进程离开的时候,调用release()来增加信号量:信号量对象.release()
以后遇到更好的例子再做补充。
事件:
- 如何使用事件:
- 创建事件对象:事件对象=multiprocessing.Event()
- 设置事件:事件对象.set() 判断事件是否set:事件对象.is_set(),等待事件set:事件对象.wait()
- 清除事件:事件对象.clear()