python程序管理模組
參考:https://www.cnblogs.com/cindy-cindy/p/8031731.html
python程序管理的模組:subprocess,multiprocessing
subprocess:執行外部的程式,而不是執行python內部編寫的函式。程序之間通過管道進行交流。
1.開啟一個程序
popen1=subprocess.Popen('tail -f events.log’, bufsize=10000, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
#popen1是讀取events.log的程序,如果希望通過程序的stdin,與其交換資料,在建立Popen物件時,引數stdin必須設定為PIPE; #stdout/stderr同理
#PIPE為管道,如果使用了管道,需要處理管道的輸出。
line = popen1.stdout.readline().strip() #清理輸出,避免死鎖
multiprocessing模組的使用
frome multiprocessing import Queue,Process,Pool
Process類
1.建立子程序
p1 = multiprocessing.Process(target = listen, args = (rdevice,))
p2 = multiprocessing.Process(target = getcpuinfo, args = (rdevice,))
2.啟動子程序
p1.start()
p2.start()
3.使得子程序結束之後再執行父程序
p1.join()
p2.join()
Queue類:多個子程序之間的通訊,比如,一個子程序向佇列寫資料,另一個程序從佇列中取資料
q = multiprocessing.Queue()
Pool類:如果需要多個子程序可以考慮程序池來管理pool。Pool建立子程序的數量取決與電腦的cpu的數量
p=Pool()
for i in range(3):
p.apply_async(task,args=(i,))
p.close()
p.join()
鎖:不同的程式同時對同一個佇列操作的時候,為了避免錯誤,可以在某個函式操作佇列的時候給它加鎖,這樣在同一個時間內只有一個程序對佇列進行操作