Python程序模組
建立程序模組的方法
os.system
os.system是最簡單建立程序的方法,引數只有一個,就是要執行的命令,如"dir",就類似於在cmd中輸入的命令。
os.exec系列函式一共有8個。檢視
os.fork
os.fork函式呼叫系統API並建立子程序,但是fork函式在windows中並不存在,在linux和mac上可以正常使用。
subprocess模組
呼叫外部命令,而那些外部命令就是這些函式的引數,subprocess模組比前3種模組提供了更多的方法來呼叫外部命令。
所有的方法種args是必傳的引數,它可以是字串或者序列型別。預設執行的程式應該是序列的第一個欄位,單個字串的話,解析依賴於平臺。在Unix系統中,如果args是一個字串,那麼這個字串會解釋成被執行程式的名字或路徑,這種情況只能用在不需要傳引數的程式上。
這裡介紹下與os.system型別的函式功能:接收引數執行命令並返回命令。他就是subprocess.call函式,但他返回的是返回命令的退出碼(為0則表示執行成功)
個人覺得:執行命令引數的話,他比os.system繁瑣多了。
multiprocessing.Process
multiprocessing建立的是子程序,所以可以有效地避免全域性直譯器鎖和有效地利用多核CPU的效能。
multiprocessing.Process物件和threading.Thread的使用方法大致一樣。
多程序之間的通訊
multiprocessing.Queue可以實現程序之間的通訊,而多執行緒中其實也是有個Queue物件,這裡的Queue物件的作用是執行緒安全。
執行緒之間可以共享變數,但是程序之間不會共享變數。對然multiprocessing.Queue的方法和queue.Queue方法一摸一樣,但是在建立的時候需要把Queue物件傳遞給程序,這樣才能正確的讓主程序獲取子程序的資料,否則主程序的Queue內一直都是空的。
執行緒池
使用的雖然還是multiprocessing模組,但它的dump類吧,可以進行多執行緒的建立,並且通過該類的dump.pool(processes=執行緒池的數量),該類的作用是複製了multiprocessing模組的API,但多執行緒實現執行緒池的方法和多程序實現程序池的方法一樣。執行緒池也可以用map()來對映函式。
努力拼搏吧,不要害怕,不要去規劃,不要迷茫。但你一定要在路上一直的走下去,儘管可能停滯不前,但也要走。import multiprocessing.dummy # 該模組作用是複製了multiprocessing模組的API import time # 多執行緒實現執行緒池的方法和多程序實現程序池的方法一樣 def process_func(process_id): print("process id %d start" % process_id) time.sleep(3) print("process id %d end"% process_id) def main(): #雖然引數叫processes但是實際建立的是執行緒 pool = multiprocessing.dummy.Pool(processes=3) for i in range(10): # 向程序池中新增要執行的任務 # apply_asyns這個函式的作用是什麼,asyns經常在伺服器中碰到這個詞;寫錯了,報錯,是async pool.apply_async(process_func,args=(i,)) pool.close() pool.join() if __name__ == "__main__": main()