1. 程式人生 > 其它 >Python程序模組

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()
努力拼搏吧,不要害怕,不要去規劃,不要迷茫。但你一定要在路上一直的走下去,儘管可能停滯不前,但也要走。