1. 程式人生 > 程式設計 >python程序的狀態、建立及使用方法詳解

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程式設計有所幫助。