python程序的狀態、建立及使用方法詳解
本文例項講述了python程序的狀態、建立及使用方法。分享給大家供大家參考,具體如下:
程序以及狀態
1. 程序
程式:例如xxx.py這是程式,是一個靜態的
程序:一個程式執行起來後,程式碼+用到的資源 稱之為程序,它是作業系統分配資源的基本單元。
不僅可以通過執行緒完成多工,程序也是可以的
2. 程序的狀態
工作中,任務數往往大於cpu的核數,即一定有一些任務正在執行,而另外一些任務在等待cpu進行執行,因此導致了有了不同的狀態
- 就緒態:執行的條件都已經慢去,正在等在cpu執行
- 執行態:cpu正在執行其功能
- 等待態:等待某些條件滿足,例如一個程式sleep了,此時就處於等待態
程序的建立-multiprocessing
multiprocessing模組就是跨平臺版本的多程序模組,提供了一個Process類來代表一個程序物件,這個物件可以理解為是一個獨立的程序,可以執行另外的事情
1. 2個while迴圈一起執行
# -*- coding:utf-8 -*- from multiprocessing import Process import time def run_proc(): """子程序要執行的程式碼""" while True: print("----2----") time.sleep(1) if __name__=='__main__': p = Process(target=run_proc) p.start() while True: print("----1----") time.sleep(1)
說明
- 建立子程序時,只需要傳入一個執行函式和函式的引數,建立一個Process例項,用start()方法啟動
2. 程序pid
# -*- coding:utf-8 -*- from multiprocessing import Process import os import time def run_proc(): """子程序要執行的程式碼""" print('子程序執行中,pid=%d...' % os.getpid()) # os.getpid獲取當前程序的程序號 print('子程序將要結束...') if __name__ == '__main__': print('父程序pid: %d' % os.getpid()) # os.getpid獲取當前程序的程序號 p = Process(target=run_proc) p.start()
3. Process語法結構如下:
Process([group [,target [,name [,args [,kwargs]]]]])
- target:如果傳遞了函式的引用,可以任務這個子程序就執行這裡的程式碼
- args:給target指定的函式傳遞的引數,以元組的方式傳遞
- kwargs:給target指定的函式傳遞命名引數
- name:給程序設定一個名字,可以不設定
- group:指定程序組,大多數情況下用不到
Process建立的例項物件的常用方法:
- start():啟動子程序例項(建立子程序)
- is_alive():判斷程序子程序是否還在活著
- join([timeout]):是否等待子程序執行結束,或等待多少秒
- terminate():不管任務是否完成,立即終止子程序
Process建立的例項物件的常用屬性:
- name:當前程序的別名,預設為Process-N,N為從1開始遞增的整數
- pid:當前程序的pid(程序號)
4. 給子程序指定的函式傳遞引數
# -*- coding:utf-8 -*- from multiprocessing import Process import os from time import sleep def run_proc(name,age,**kwargs): for i in range(10): print('子程序執行中,name= %s,age=%d,pid=%d...' % (name,os.getpid())) print(kwargs) sleep(0.2) if __name__=='__main__': p = Process(target=run_proc,args=('test',18),kwargs={"m":20}) p.start() sleep(1) # 1秒中之後,立即結束子程序 p.terminate() p.join()
執行結果:
子程序執行中,name= test,age=18,pid=45097...
{'m': 20}
子程序執行中,name= test,pid=45097...
{'m': 20}
5. 程序間不同享全域性變數
# -*- coding:utf-8 -*- from multiprocessing import Process import os import time nums = [11,22] def work1(): """子程序要執行的程式碼""" print("in process1 pid=%d,nums=%s" % (os.getpid(),nums)) for i in range(3): nums.append(i) time.sleep(1) print("in process1 pid=%d,nums)) def work2(): """子程序要執行的程式碼""" print("in process2 pid=%d,nums)) if __name__ == '__main__': p1 = Process(target=work1) p1.start() p1.join() p2 = Process(target=work2) p2.start()
執行結果:
in process1 pid=11349,nums=[11,22]
in process1 pid=11349,22,0]
in process1 pid=11349,1]
in process1 pid=11349,1,2]
in process2 pid=11350,22]
更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python程序與執行緒操作技巧總結》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python入門與進階經典教程》、《Python+MySQL資料庫程式設計入門教程》及《Python常見資料庫操作技巧彙總》
希望本文所述對大家Python程式設計有所幫助。