1、多進程 與 多線程 的概念html
一、進程的概念python
進程是程序在計算機上的一次執行活動。當你運行一個程序,你就啓動了一個進程。顯然,程序是死的(靜態的),進程是活的(動態的)。多線程
進程能夠分爲系統進程和用戶進程。凡是用於完成操做系統的各類功能的進程就是系統進程,它們就是處於運行狀態下的操做系統自己;函數
全部由你啓動的進程都是用戶進程。進程是操做系統進行資源分配的單位。spa
二、示例操作系統
PID 即進程ID(每一個進程有惟一的PID號) 線程
PPID 即父進程IDorm
三、進程 與 線程 的區別htm
進程:每一個正在系統上運行的程序都是一個進程。每一個進程包含一到多個線程。進程也多是整個程序或者是部分程序的動態執行。對象
線程:線程是一組指令的集合,或者是程序的特殊段,它能夠在程序裏獨立執行。
四、多進程 與 多線程 的區別
多線程使用的是cpu的一個核,適合io密集型
多進程使用的是cpu的多個核,適合運算密集型
五、Python 的多進程模塊 (須要 import 導入該模塊便可)
該模塊支持子進程、通訊、共享數據、執行不一樣形式的同步,提供了Process,Pipe, Lock等組件
import multiprocessing
2、多進程的相關操做
一、建立多進程
格式爲 p = multiprocessing.Process(target=worker_1, args=(2, ))
其中:target 指定的是當進程執行時,須要執行的函數
args 當進程執行時,須要給函數傳入的參數;args 必須是一個tuple,特別是當函數須要傳輸一個參數時,即 單個元素的元組表示方法 (1,)
p 表明的是一個多進程。
二、多進程的經常使用操做
p.is_alive() 判斷進程是否存活,返回布爾值
p.run() 啓動進程
p.start() 啓動進程,會自動調用 run 方法,推薦使用該方法。
p.join(timeout) 等待子進程結束 或到超時時間
p.terminate() 強制子進程退出
p.name 進程的名字
p.pid 進程的PID
三、示例
import multiprocessing #導入多進程模塊 import time #導入時間模塊 def worker(args,interval): print("start worker {0}".format(args)) time.sleep(interval) #暫停時間:秒 print("end worker {0}".format(args)) def main(): print("start main") p1 = multiprocessing.Process(target=worker,args=(1,1)) p2 = multiprocessing.Process(target=worker,args=(2,2)) p3 = multiprocessing.Process(target=worker,args=(3,3)) p1.start() p1.join(timeout=3) p2.start() p3.start() print("the number of CPU is {0}".format(multiprocessing.cpu_count())) for p in multiprocessing.active_children(): print("the name of active children is {0},{1} pid is alive".format(p.name,p.pid)) print("end main") if __name__ == '__main__': main()
運行結果
四、單個元素的元組表示方法 (1,)
3、多進程 的 組件——Lock 鎖
一、鎖的概念
若是有多個線程同時操做一個對象,若是沒有很好地保護該對象,會形成程序結果的不可預期。因而 鎖 的概念應運而生。
4、多進程 的 共享內存——Value 和 Array
一、python的multiprocessing模塊也給咱們提供了共享內存的操做
二、通常的變量在進程之間是無法進行通信的,multiprocessing提供了Value和Array模塊,他們能夠在不通的進程中共同使用。