天天看點

多程序的使用 | 手把手教你入門Python之一百零四

上一篇: 線程間通信 | 手把手教你入門Python之一百零三 下一篇: 程序和線程的差別 | 手把手教你入門Python之一百零五 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《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(程序号)

配套視訊