python基礎26 -----python進程及協成

來源:互聯網
上載者:User

標籤:下一步   關係   --   syn   greenlet   運行   部分   多核   mina   

一、進程

  1、multiprocessing模組實現多進程並發。

    1.1multiprocessing包是Python中的多流程管理組件,與threading.Thread類似,它可以利用multiprocessing.Process對象來建立一個進程  該進程可以運行在Python程式內部編寫的函數,屬於父進程和子進程的關係。該Process對象與Thread對象的用法相同,也有start(), run(),   join()的方法。

    1.2Process類的簡紹 

    構造方法:

      Process([group [, target [, name [, args [, kwargs]]]]])

      group: 線程組,目前還沒有實現,庫引用中提示必須是None; 
      target: 要執行的方法; 
      name: 進程名; 
      args/kwargs: 要傳入方法的參數。

    執行個體方法:

      is_alive():返回進程是否在運行。

      join([timeout]):阻塞當前上下文環境的進程程,直到調用此方法的進程終止或到達指定的timeout(選擇性參數)。

      start():進程準備就緒,等待CPU調度

      run():strat()調用run方法,如果執行個體進程時未制定傳入target,這star執行t預設run()方法。

      terminate():不管任務是否完成,立即停止背景工作處理序

    屬性:

      daemon:和線程的setDeamon功能一樣

      name:進程名字。

      pid:進程號。

    1.3、執行個體操作

      

  2、處理序間通訊方法——進程隊列

    2.1進程隊列queue,與線程隊列相似,:

      

 

  2.2管道(pipe),:

      

      注釋:Pipe()返回的兩個連線物件代表管道的兩端。 每個連線物件都有send()和recv()方法(等等)。 請注意,如果兩個進程    (或線程)嘗試同時讀取或寫入管道的同一端,管道中的資料可能會損壞。

  2.3manager()進程之間資料共用,:

    

    注釋:父進程必須等到子進程執行完成後才能執行下一步。

      Queue和pipe只是實現了資料互動,並沒實現資料共用,但是manager是一個進程去更改另一個進程的資料.

  3、進程池

    3.1什麼是進程池?

     進程池內部維護一個進程式列,當使用時,則去進程池中擷取一個進程式列,如果進程池中沒有可供使用的進程式列,那麼程式就  會等待,直到進程池中有可用進程式列為止。

    3.2:

      

      進程池中有以下幾個主要方法:

         apply:從進程池裡取一個進程並執行

         apply_async:apply的非同步版本,一次性取完後再執行

         terminate:立刻關閉線程池

         close:等待所有進程結束後,才關閉線程池

         join:主進程等待所有子進程執行完畢,必須在close或terminate之後

二、協成

  1、什麼是協成?  

  協程,又稱微線程,纖程。英文名Coroutine,協程是一種使用者態的輕量級線程。

  2、協成特點

    協程擁有自己的寄存器上下文和棧。協程調度切換時,將寄存器上下文和棧儲存到其他地方,在切回來的時候,恢複先前儲存的寄存器  上下文和棧。因此:協程能保留上一次調用時的狀態(即所有局部狀態的一個特定組合),每次過程重入時,就相當於進入上一次調用的狀  態,換種說法:進入上一次離開時所處邏輯流的位置。

  3、yield與協成,:

    

  4、greenlet實現協成

    

    greenlet機制的主要思想是:產生器函數或者協程函數中的yield語句掛起函數的執行,直到稍後使用next()或send()操作進行恢複為止。  可以使用一個調度器迴圈在一組產生器函數之間協作多個任務。greentlet是python中實現我們所謂的"Coroutine(協程)"的一個基礎庫.

  5、gevent實現協成

    

    注釋:同比之前上面兩個實現協成的方式而言,當gevent實現協成遇到IO操作時會切換到下一個任務中,大大的節省了cpu執行程式的  時間

    注釋:

    協程的好處:無需線程環境切換的開銷,無需原子伺服器用戶端檔案鎖及同步的開銷;方便切換控制流程,簡化編程模型;高並發+高擴充性+低成  本:一個CPU支援上萬的協程都不是問題。所以很適合用於高並發處理。
    缺點:無法利用多核資源:協程的本質是個單線程,它不能同時將 單個CPU 的多個核用上,協程需要和進程配合才能運行在多CPU    上.當然我們日常所編寫的絕大部分應用都沒有這個必要,除非是cpu密集型應用。進行阻塞(Blocking)操作(如IO時)會阻塞掉整個程式

 

         

 

    

 

     

 

python基礎26 -----python進程及協成

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.