1. 程式人生 > >python程序管理模組

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()

鎖:不同的程式同時對同一個佇列操作的時候,為了避免錯誤,可以在某個函式操作佇列的時候給它加鎖,這樣在同一個時間內只有一個程序對佇列進行操作