上一篇: 線程間通信 | 手把手教你入門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(程序号)