顧名思義,進程就是程序正在執行的一個過程.進程的概念最先是來源於操做系統,是操做系統最核心的概念,因此要真正瞭解進程,必須事先了解操做系統.html
http://www.javashuo.com/article/p-cpsqrfkp-c.htmlnode
簡單來講,由於早期的計算機只有一個cpu,也能支持併發(僞並行)的能力.或者是將一個單獨的cpu變成多個虛擬的cpu(也就是多道技術:時間多路複用和空間多多路複用+硬件上支持隔離).python
官方的話來講,進程(Process)就是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,也是操做系統結構的基礎.linux
狹義來講,進程是正在運行的程序的實例web
廣義來講,進程是一個具備必定獨立功能的程序關於某個數據集合的一次運行活動.是操做系統動態執行的基本單元,在傳統的操做系統中,進程便是基本的分配單元,又是基本的執行單元.shell
同一個程序執行兩次,就會在操做系統中出現兩個進程,這兩個進程是互不干擾的,相互獨立的,因此咱們能夠同時運行一個軟件,分別作不一樣的事情,也不會混亂.編程
併發:併發是指資源有限的狀況下,二者或者更多的使用者輪流使用資源,併發是一種僞並行,實際上併發同一時間仍是隻能被一個使用者使用,只是能夠交替使用,從而提升效率windows
並行:並行是指二者同時執行,是真正的同時執行,不是併發那樣看似像是同時進行,並行的最基礎的條件就是多核,或者說是多個大腦,資源夠用的狀況下,才能夠並行.服務器
其區別:session
並行是從微觀上,也就是在一個精確的時間片刻,有不一樣的程序在執行,就必須有多個處理器,來實現並行.
併發是從宏觀上看的,在一個時間段內能夠看作是同時執行,好比一個服務器要同時處理多個session,其實是併發,而不是並行.
實際上,新進程的建立都是由一個已經存在的進程執行了一個用於建立進程的系統調用而建立的.
其實究其根原本說,multiprocess不是一個模塊,而是python中一個操做,管理進程的包.其中的multi就是取自mulitiple的多功能的意思.
Process模塊時一個建立進程的模塊,藉助這個模塊咱們就能夠完成進程的建立.
點開Process的源碼,咱們能夠看到如下內容
xxxxxxxxxx
class Process(object):
def __init__(self, group=None, target=None, name=None, args=(), kwargs={}):
self.name = ''
self.daemon = False
self.authkey = None
self.exitcode = None
self.ident = 0
self.pid = 0
self.sentinel = None
def run(self):
pass
def start(self):
pass
def terminate(self):
pass
def join(self, timeout=None):
pass
def is_alive(self):
return False
'''
其中的參數含義爲:
1. group,默認爲None,不用賦值
2. target爲調用對象,能夠是函數,或者類
3. args表示調用對象的位置參數元組,注意,必須是元組
4. kwargs爲調用對象的字典,注意,必須是字典
5. name爲子進程的名稱,這個能夠任意定義
屬性的含義爲:
1. p.daemon(),默認值爲False,若是設置成True就表明p是後臺運行的守護進程,p的父進程終止的時候p也要隨之終止,且p不能建立本身的新進程
2. p.name(),就是子進程的名字
3. p.pid(),子進程的pid
4. p.exitcode(),沒有大用,沒必要理會
5. p.authkey(),暫時不用瞭解
其中的一些方法的含義爲:
1. p.run(),進程啓動時會自動運行的方法,沒必要手動去調用,因此咱們能夠在這個方法裏寫入想要實現或者賦值的一些語句
2. p.start(),啓動進程,並自動調用子進程中的run(),須要手動調用
3. p.terminate(),強制終止進程,但不會進行清理操做,容易產生殭屍進程,要謹慎使用
4. p.join(),主線程等待p終止,注意,是主線程在等,p子進程仍是在運行的狀態,括號裏是能夠寫等待超時的時間,可是join只能等待用start開啓的進程,用run開啓的不能用
5. p.is_alive(),判斷子進程p是否還在運行,若是在運行返回True,若是沒有運行返回False
'''
很顯然這是一個類,因此咱們能夠經過對這個類實例化來產生對象.
須要注意的幾點是:
Process(target = func,name = nick,args = (,))