日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

40.多进程同步--锁--多把锁

發(fā)布時間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 40.多进程同步--锁--多把锁 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

多進程同步?


  • 首先多進程默認是并發(fā)行為,多個進程同時執(zhí)行
  • 執(zhí)行的順序,以及何時執(zhí)行完畢無法控制
    • 多個進程如果涉及到了通信,數據的有序性無法保證
    • 需要鎖來控制進程之間執(zhí)行的順序
    • 對于進程資源的控制
  • 缺點:同步進程,并發(fā)沒有了。效率低下。
  • Lock:一把鎖
  • Lock.acquire() 拿著鎖 通信證
    • 搶占鎖,如果拿不到,阻塞等待
  • Lock.release() 放掉鎖
    • 一定要記得在工作完畢之后釋放鎖。
  • **Semaphore**:多把鎖,同時提供多把鎖/通行證,保證可以有一定個數的進程保持并發(fā),這個用的多一點
    • s = Semaphore(3)
    • s.acquire()
    • s.release()
  • 一般情況下我們多進程操作數據庫的時候必須加鎖,這樣才能保證數據的有序性
  • #多進程同步/鎖
    from multiprocessing import Process,current_process,Lock
    import sys 
    from time import sleep
    def work(l):print('%s進程已經開始了' % current_process().name)l.acquire() #搶占這個通信證/鎖for var in range(65,68):print('%s:%s' % (current_process().name,chr(var)))sys.stdout.flush()l.release() #放掉通行證
    def main():l = Lock()Process(target=work,name='a',args=(l,)).start()Process(target=work,name='b',args=(l,)).start()Process(target=work,name='c',args=(l,)).start()
    if __name__ == "__main__":main()
    

    運行結果:

    a進程已經開始了               y
    a:A
    a:B
    a:C
    b進程已經開始了
    b:A
    b:B
    b:C
    c進程已經開始了
    c:A
    c:B
    c:C
    

    ?

  • #多進程同步/多把鎖(信號量)
    from multiprocessing import Process,current_process,Semaphore
    import sys 
    from time import sleep
    def work(s):print('%s進程已經開始了' % current_process().name)s.acquire()for var in range(65,100):print('%s:%s' % (current_process().name,chr(var)))sys.stdout.flush()s.release()
    def main():s = Semaphore(3) #通行證,限制同一時間提供了3把鎖,也就是說同一時間最多3個進程同時工作,其余的進程阻塞等待,Process(target=work,name='a',args=(s,)).start()Process(target=work,name='b',args=(s,)).start()Process(target=work,name='c',args=(s,)).start()Process(target=work,name='d',args=(s,)).start()Process(target=work,name='e',args=(s,)).start()
    if __name__ == "__main__":main()
    

      

      

?

轉載于:https://www.cnblogs.com/zhangan/p/10262456.html

總結

以上是生活随笔為你收集整理的40.多进程同步--锁--多把锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。