Python-程序-基礎使用
阿新 • • 發佈:2018-12-25
例項1
# coding=utf-8 from multiprocessing import Process import os """ 多程序中,每個程序中所有資料(包括全域性變數)都各有擁有一份,互不影響 父程序、子程序執行順序沒有規律,完全取決於作業系統的排程演算法 Process([group [, target [, name [, args [, kwargs]]]]]) target:表示這個程序例項所呼叫物件; args:表示呼叫物件的位置引數元組; kwargs:表示呼叫物件的關鍵字引數字典; name:為當前程序例項的別名; group:大多數情況下用不到; Process類常用方法: is_alive():判斷程序例項是否還在執行; join([timeout]):是否等待程序例項執行結束,或等待多少秒; start():啟動程序例項(建立子程序); run():如果沒有給定target引數,對這個物件呼叫start()方法時,就將執行物件中的run()方法; terminate():不管任務是否完成,立即終止; Process類常用屬性: name:當前程序例項別名,預設為Process-N,N為從1開始遞增的整數; pid:當前程序例項的PID值; """ # 子程序要執行的程式碼 def run_proc(name): print('子程序執行中,name= %s ,pid=%d...' % (name, os.getpid())) if __name__ == '__main__': print('父程序 %d.' % os.getpid()) p = Process(target=run_proc, args=('test',)) print('子程序將要執行') p.start() # 啟動 p.join() # 等待子程序結束後再繼續往下執行,通常用於程序間的同步。 print('子程序已結束')
例項2
# coding=utf-8 from multiprocessing import Process import time import os # 兩個子程序將會呼叫的兩個方法 def worker_1(interval): print("worker_1,父程序(%s),當前程序(%s)" % (os.getppid(), os.getpid())) t_start = time.time() time.sleep(interval) # 程式將會被掛起interval秒 t_end = time.time() print("worker_1,執行時間為'%0.2f'秒" % (t_end - t_start)) def worker_2(interval): print("worker_2,父程序(%s),當前程序(%s)" % (os.getppid(), os.getpid())) t_start = time.time() time.sleep(interval) t_end = time.time() print("worker_2,執行時間為'%0.2f'秒" % (t_end - t_start)) def main(): print("程序ID:%s" % os.getpid()) # 輸出當前程式的ID p1 = Process(target=worker_1, args=(2,)) p2 = Process(target=worker_2, name="程序2", args=(1,)) # 如果不指定name引數,預設的程序物件名稱為Process-N,N為一個遞增的整數 p1.start() p2.start() print("p2.is_alive:%s" % p2.is_alive()) # 同時父程序仍然往下執行,如果p2程序還在執行,將會返回True # 輸出p1和p2程序的別名和pid print("p1.name=%s" % p1.name) print("p1.pid=%s" % p1.pid) print("p2.name=%s" % p2.name) print("p2.pid=%s" % p2.pid) # join括號中不攜帶引數,表示父程序在這個位置要等待p1程序執行完成後, # 再繼續執行下面的語句,一般用於程序間的資料同步, # 如果不寫這一句,下面的is_alive判斷將會是True, # 在shell(cmd)裡面呼叫這個程式時,可以完整的看到這個過程 p1.join() print("p1.is_alive=%s" % p1.is_alive()) if __name__ == '__main__': main()