千家信息网

python并发编程中多进程与互斥锁的原理解析

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,这篇文章主要介绍"python并发编程中多进程与互斥锁的原理解析",在日常操作中,相信很多人在python并发编程中多进程与互斥锁的原理解析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2024年11月22日python并发编程中多进程与互斥锁的原理解析

这篇文章主要介绍"python并发编程中多进程与互斥锁的原理解析",在日常操作中,相信很多人在python并发编程中多进程与互斥锁的原理解析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"python并发编程中多进程与互斥锁的原理解析"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

运行多进程 每个子进程的内存空间是互相隔离的 进程之间数据不能共享的

互斥锁

但是进程之间都是运行在一个操作系统上,进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,

是可以的,而共享带来的是竞争,竞争带来的结果就是错乱

#并发运行,效率高,但竞争同一打印终端,带来了打印错乱from multiprocessing import Processimport timedef task(name):  print("%s 1" % name)  time.sleep(1)  print("%s 2" % name)  time.sleep(1)  print("%s 3" % name)if __name__ == '__main__':  for i in range(3):    p = Process(target=task, args=("子进程%s" % i,))    p.start()'''子进程2 1子进程0 1子进程1 1子进程2 2子进程1 2子进程0 2子进程2 3子进程1 3子进程0 3'''

如何控制,就是加锁处理。而互斥锁的意思就是互相排斥,如果把多个进程比喻为多个人,

互斥锁的工作原理就是多个人都要去争抢同一个资源:卫生间,一个人抢到卫生间后上一把锁,其他人都要等着,等到这个完成任务后释放锁,其他人才有可能有一个抢到......

所以互斥锁的原理,就是把并发改成串行,降低了效率,但保证了数据安全,不错乱

加了互斥锁就没有并发效果了 加上锁只有一个可以运行 互斥锁会把并发变成串行 效率变低了

解决:

导入模块 Lock

现在程序启动 所有进程首先会去抢锁 只有抢到锁的才能运行

等这个进程运行完了解锁后 再到其他进程继续抢锁

from multiprocessing import Process, Lockimport timedef task(name, mutex):  # 加锁  mutex.acquire()  print("%s 1" % name)  time.sleep(1)  print("%s 2" % name)  time.sleep(1)  print("%s 3" % name)  # 把锁拆了  mutex.release()if __name__ == '__main__':  # 建一个对象实例  mutex = Lock()  for i in range(3):    # 把锁传给子进程 让所有子进程用同一把锁    p = Process(target=task, args=("子进程%s" % i, mutex))    p.start()'''现在程序启动 所有进程首先会去抢锁 只有抢到锁的才能运行等这个进程运行完了解锁后 再到其他进程继续抢锁''''''子进程0 1子进程0 2子进程0 3子进程1 1子进程1 2子进程1 3子进程2 1子进程2 2子进程2 3'''

牺牲了效率,保证数据不错乱

到此,关于"python并发编程中多进程与互斥锁的原理解析"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0