<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      1、基本概念

            多個進程可以協同工作來完成一項任務,通常需要共享數據。所以在多進程之間保持數據的一致性就很重要,需要共享數據協同的進程必須以適當的策略來讀寫數據。同步原語和線程的庫類似。

            - Lock:一個Lock對象有兩個方法acquire和release來控制共享數據的讀寫權限。

            - Event:一個進程發事件的信號,另一個進程等待事件的信號。Event對象有兩個方法set和clear來管理自己內部的變量。

            - Condition:此對象用來同步部分工作流程,在并行的進程中,有兩個基本的方法,wait()用來等待進程,notify_all用來通知所有等待此條件的進程。

            - Semaphore:用來共享資源,比如:支持固定數據的共享連接。

            - RLock:遞歸鎖對象,其用途和方法同Threading模塊一樣。

            - Barrier:將程序分成幾個階段,適用于有些進程必須在某些特性進程之后執行,處于Barrier之后的代碼不能同處于Barrier之前的代碼并行。

      2、測試用例

            使用barrier函數來同步兩個進程

      import multiprocessing
      from multiprocessing import Barrier, Lock, Process
      from time import time
      from datetime import datetime
      
      def test_with_barrier(synchronizer, serializer):
          name = multiprocessing.current_process().name
          synchronizer.wait()
          now = time()
          with serializer:
              print("process %s ----> %s" %(name, datetime.fromtimestamp(now)))
      
      def test_without_barrier():
          name = multiprocessing.current_process().name
          now = time()
          print("process %s ----> %s" %(name, datetime.fromtimestamp(now)))
      
      if __name__ == "__main__":
          # create a barrier and lock. 
          synchronizer = Barrier(2)
          serializer = Lock()
          # create four processes
          Process(name='p1 - test_with_barrier', target=test_with_barrier, args=(synchronizer, serializer)).start()
          Process(name='p2 - test_with_barrier', target=test_with_barrier, args=(synchronizer, serializer)).start()
          Process(name='p3 - test_without_barrier', target=test_without_barrier).start()
          Process(name='p4 - test_without_barrier', target=test_without_barrier).start()

            運行結果如下:

            

            test_with_barrier函數調用了barrier的wait()方法,當兩個進程都調用wait()方法時,他們會一起繼續執行。

      3、進程之間管理狀態

            Python的多進程模塊提供了在所有的用戶間管理共享信息的管理者(Manager),一個管理者對象控制著持有Python對象的服務進程,并允許其他進程操作共享對象。

            管理者特性:

            - 它控制著管理共享對象的服務進程

            - 它確保當某一進程修改了共享對象之后,所有的進程拿到的共享對象都得到了更新。

            代碼示例:

      import multiprocessing
      
      def worker(dictionary, key, item):
          dictionary[key] = item
          print("key = %d value = %d" %(key, item))
      
      if __name__ == "__main__":
          mgr = multiprocessing.Manager()
          dictionary = mgr.dict()
          jobs = [multiprocessing.Process(target=worker, args=(dictionary, i, i*2)) for i in range(10)]
          for j in jobs:
              j.start()
          for j in jobs:
              j.join()
          print("Results:",dictionary)

            運行結果:

            

            上述代碼創建了一個管理者字典dictionary,在n個job之間共享,每個job都會更新字典的某一個index,所有的job完成之后,最后打印該字典,所有數據均存在。

            

       

      posted on 2018-10-18 15:33  杜先生的博客  閱讀(3535)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 午夜福利高清在线观看| 久久精品99国产国产精| 国产一区二区三区色噜噜| 国产盗摄xxxx视频xxxx| 国产精品一区二区三区三级| 无码人妻斩一区二区三区| 国产视频不卡一区二区三区| 色九月亚洲综合网| 国产精品午夜精品福利| 亚洲自偷自拍熟女另类| 在线免费不卡视频| 义马市| 色翁荡息又大又硬又粗又视频图片| 2021国产成人精品久久| 国产人妻久久精品一区二区三区| 粉嫩一区二区三区精品视频| 亚洲精品成人福利网站| 亚洲中文字幕久在线| 日日噜噜大屁股熟妇| 国产午夜A理论毛片| 小婕子伦流澡到高潮h| 亚洲精品码中文在线观看| 东京热人妻丝袜无码AV一二三区观| 国模少妇无码一区二区三区| 九九热免费在线视频观看| 99久久99久久久精品久久| 国产午夜精品久久精品电影| 亚洲av色香蕉一区二区| 99人体免费视频| 成人午夜视频一区二区无码| 福利一区二区视频在线| 久久综合色之久久综合| 99精品国产一区二区三| 国产精品中文字幕在线| 中文字幕在线无码一区二区三区 | 精品乱人伦一区二区三区| 国产一区二区丰满熟女人妻| 人人人澡人人肉久久精品| 国产一区二区高清不卡| 成全世界免费高清观看| 亚洲天堂成人黄色在线播放|