Python基礎——多進程、多線程

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模塊,他們能夠在不通的進程中共同使用。

相關文章
相關標籤/搜索