python多進程

來源:互聯網
上載者:User

標籤:splay   close   讀寫   新博   載入   記憶體   except   exit   blog   

好長時間沒有更新部落格內容了,最近一直在研究python,剛好瞭解多進程 那我們就一起瞭解一下多進程。(寫給自己看  怕自己忘了。。。)

 

1、什麼是進程?

  進程指的是程式的一次執行過程,而程式則指的是一個檔案,磁碟中可執行檔代碼。

  進程運行時需要把程式載入如記憶體,進程有一定的生命週期,進程的建立由作業系統控制,進程佔有系統的資源

2、進程的分類

  IO密集型 : IO操作遠遠大於計算操作,因為CPU效能要遠遠高於IO的讀寫操作,所以這類程式一般cpu都處於等待IO啟動並執行狀態。

  cpu密集型:程式中運算較多,IO較少,cpu佔用率高

3、進程式控制制塊 (PCB)

  指的是在記憶體中開闢的存放進程資訊的空間。在linux下查看進程相關資訊:ps -aux

  每個記憶體都有單獨佔有4G地址空間=======》存放在電腦的虛擬記憶體地址。

4、進程的狀態:

  三態:  

    就緒 : 進程具備運行條件,等待系統分配資源
    執行 : 進程佔有cpu開始運行
    等待 : 又稱為阻塞態或者睡眠態,進程等待某種條件,或等待某件事件的完成

  

  五態(在3態基礎上增加)

    建立 : 建立一個進程, 直接表現為建立程式,或者建立子進程

    終止 : 程式執行結束,完成善後,或處於殭屍狀態

  進程狀態標識:

    D : 等待態
    S : 等待態
    T : 等待態
    R : 運行態,就緒態
    Z :  殭屍態進程
    N : 低優先順序的進程
    < :  高優先順序
    + :  前台進程

  

    linux 下進程相關命令

    ps  -aux   顯示進程資訊

    ps  -ef

    ps  -ajx

    pstree  查看進程樹結構

    top  檢測系統中的進程

    進程優先順序 : linux  進程優先順序範圍  -20 --- 19 數字越小優先順序越高

    

    nice  -9  ./while  表示以9的優先順序運行某個程式

    renice  n  pid  將pid的進程 優先順序修改為 n

    kill  -sig   pid   給pid的進程發送一個sig訊號

    ./while.py  &  將程式後台運行

5、建立進程:
  fork 建立新的進程 (linux 和unix 平台)

  import os 

  fork()
  功能 : 為當前進程,建立一個子進程
  參數: 無
  傳回值:

     < 0  表示建立進程失敗
          = 0  在新建立的進程中返回一個傳回值
          > 0  在父進程中返回一個傳回值

  父子進程 :

    子進程會繼承父進程幾乎全部的程式碼片段
              子進程擁有自己獨立的資訊標識

  

  * 子進程和父進程都是獨立存在的,在運行上相互不影響
  * 利用fork傳回值在父子進程中的不同去執行不同的內容,是多任務的固定方法

  * 父進程中fork的傳回值為建立的子進程的PID號
  * 父子進程幾乎擁有相同的資源,包括fork前所定義的內容

  

 1 import os 2 from time import sleep 3  4 a = 10 5 #建立子進程 6 pid  = os.fork() 7  8 if pid < 0: 9     print(‘create process failed‘)10 elif pid == 0:11     a = 100012     print("This is child process")13 else:14     sleep(2)15     print(‘The pid = ‘,pid)16 17     print("This is parent process")18 19 print(‘a = ‘,a)20 print("**********the end***********")
View Code

  import os

  os.getpid()    擷取當前進程的PID號
  os.getppid()   擷取當前進程父進程的PID號

  進程退出函數
  import os
  os._exit([status])

  import sys
  sys.exit([status])

    功能 : 退出一個進程
    

 1 import os 2 import sys 3  4 a = 0 5 while a < 10: 6     print(‘a = ‘,a) 7     a += 1 8     try: 9         if a == 5:10             # sys.exit(3)11             os._exit(0)12     except SystemExit as e:13         print(e)14 15 print("+++++++++++++++++")
 

 

    參數 : 表示進程的退出狀態,0表示進程正常退出,非0表示異常退出。sys.exit()可以傳入字串,在退出時列印一下字串

    區別 : _exit()  直接退出
          exit()   拋出SystemExit,如果要是處理了異常

    殭屍進程:子進程先於父進程退出,父進程沒有處理子進程的退出狀態,此時子進程就會成為殭屍進程

 

python多進程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.