一、 進程定義:html
(1) 進程是一個實體。每一個進程都有他本身的地址空間,通常包括文本區域、數據區域和堆棧。進程是線程的容器。併發
(2) 進程是一個「執行中的程序」app
二、 進程的特徵:異步
(1) 動態性async
(2) 併發性分佈式
(3) 獨立性函數
(4) 異步性:同步:順序執行,不可跳躍 異步:並行url
(5) 結構特徵:進程由程序、數據和進程控制塊(PCB,存進程相關的信息,好比進程ID,父ID,狀態)三部分組成spa
(6) 多個不一樣的進程能夠包含相同的程序線程
三、 CPU組成:運算器、控制器和寄存器
四、 進程切換:從正在運行的進程中收回處理器,而後再使待運行進程來佔用處理器
五、 進程的上下文:進程切換時被存儲在寄存器中打包的中間數據
六、 進程運行狀態:
(1) 就緒狀態
(2) 運行狀態
(3) 阻塞狀態:因爲進程等待某種條件(如 I/O 操做或進程同步),在條件未知足以前沒法執行
七、 分庫、分秒、分佈式計算、分佈式索引、異步進程
八、 同步、異步、阻塞、非阻塞
九、 程序計數器:program counter 程序運行到哪一行
十、 Python中一些進程模塊
(1) os.fork()
(2) subprocess
(3) processing
(4) Multiprocessing
十一、 os.fork()
在Linux中,執行fork函數後,父進程拿到的fork函數返回值是子進程的pid,子進程拿到的fork函數返回值是0,父進程和子進程會分別執行後續未執行的代碼.換了意思:子進程永遠返回0,而父進程返回子進程的ID。
十二、 進程池pool的一些方法:
(1) apply()
(2) map()
(3) close()
(4) terminate()
(5) apply_async()只能執行一個
1三、 線程比進程快的緣由:線程依附於進程,但他快的緣由是不不涉及到上下文PCB那些東西
1四、 Pool.map和六件客map的區別:pool.map用的是多進程,map是單進程
1五、 隊列:Queue,此隊列跟進程中的消息隊列不一樣
Q.put()放
Q.full()判斷隊列是否滿了
Q.qsize()判斷隊列的大小
Q.empty()判斷隊列是否爲空
Q.get(True,2)等待超時時間2秒,設置True後若是等待2秒後尚未數值返回就結束;False表示等2秒後若是沒有值拋異常;若是什麼都不寫,會死等
調用隊列對象的get()方法從隊頭刪除並返回一個項目。可選參數爲block,默認爲True。若是隊列爲空且block爲True,get()就使調用線程暫停,直至有項目可用。若是隊列爲空且block爲False,隊列將引起Empty異常
#練習:最簡單的多進程模型 import multiprocessing def do(n) : #獲取當前線程的名字 name = multiprocessing.current_process().name print name,'starting' print "worker ", n return if __name__ == '__main__' : numList = [] for i in xrange(5) : p = multiprocessing.Process(target=do, args=(i,)) numList.append(p) p.start() p.join() print "Process end." print numList #練習:三個進程,每一個進程寫一個文件,每一個文件中有進程的名字和當前日期 import time import multiprocessing import os def write(file): name=multiprocessing.current_process().name with open(file,"w") as f: f.write(name+":"+time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())) return if __name__=="__main__": for i in range(3): file_path = os.path.join("e:\\test4",str(i)+".txt") p = multiprocessing.Process(target=write, args=(file_path,)) #參數是個元組,因此必須有個逗號 p.start() p.join() #練習:多進程模板 import multiprocessing import urllib2 import time def func1(url) : response = urllib2.urlopen(url) html = response.read() print html[0:50] time.sleep(2) def func2(url) : response = urllib2.urlopen(url) html = response.read() print html[0:50] time.sleep(2) if __name__ == '__main__' : p1 = multiprocessing.Process(target=func1,args=("http://www.sogou.com",),name="g1") p2 = multiprocessing.Process(target=func2,args=("http://www.baidu.com",),name="g2") p1.start() p2.start() p1.join() #加了join是等全部子進程都執行完後纔會打印done,若是不加join,會先打印done,但子進程依然會執行 p2.join() time.sleep(2) print "done!"