開發與維運

多進程的使用

本文來自於千鋒教育在阿里雲開發者社區學習中心上線課程《Python入門2020最新大課》,主講人姜偉。

多進程的使用

進程

程序:例如xxx.py這是程序,是一個靜態的。

進程:一個程序運行起來後,代碼+用到的資源 稱之為進程,它是操作系統分配資源的基本單元。

不僅可以通過線程完成多任務,進程也是可以的。

進程的狀態

工作中,任務數往往大於cpu的核數,即一定有一些任務正在執行,而另外一些任務在等待cpu進行執行,因此導致了有了不同的狀態。

  • 就緒態:運行的條件都已經滿足,正在等在cpu執行。
  • 執行態:cpu正在執行其功能。
  • 等待態:等待某些條件滿足,例如一個程序sleep了,此時就處於等待態。

創建進程

multiprocessing模塊就是跨平臺版本的多進程模塊,提供了一個Process類來代表一個進程對象,這個對象可以理解為是一個獨立的進程,可以執行另外的事情。
創建子進程時,只需要傳入一個執行函數和函數的參數,創建一個Process實例,用start()方法啟動。

import multiprocessing, time, os


def dance(n):
    for i in range(n):
        time.sleep(0.5)
        print('正在跳舞{},pid={}'.format(i, os.getpid()))


def sing(m):
    for i in range(m):
        time.sleep(0.5)
        print('正在唱歌{},pid={}'.format(i, os.getpid()))


if __name__ == '__main__':
    print('主進程的pid={}'.format(os.getpid()))
    # 創建了兩個進程
    # target 用來表示執行的任務
    # args 用來傳參,類型是一個元組
    p1 = multiprocessing.Process(target=dance, args=(100,))
    p2 = multiprocessing.Process(target=sing, args=(100,))

    p1.start()
    p2.start()

方法說明

Process( target [, name [, args [, kwargs]]])
  • target:如果傳遞了函數的引用,可以任務這個子進程就執行這裡的代碼
  • args:給target指定的函數傳遞的參數,以元組的方式傳遞
  • kwargs:給target指定的函數傳遞命名參數
  • name:給進程設定一個名字,可以不設定

Process創建的實例對象的常用方法:

  • start():啟動子進程實例(創建子進程)
  • is_alive():判斷進程子進程是否還在活著
  • join([timeout]):是否等待子進程執行結束,或等待多少秒
  • terminate():不管任務是否完成,立即終止子進程

Process創建的實例對象的常用屬性:

  • name:當前進程的別名,默認為Process-N,N為從1開始遞增的整數
  • pid:當前進程的pid(進程號)

配套視頻

Leave a Reply

Your email address will not be published. Required fields are marked *