亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python進程的狀態、創建及使用方法詳解

發布時間:2020-09-03 14:52:00 來源:腳本之家 閱讀:138 作者:xlengji 欄目:開發技術

本文實例講述了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, age, 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,age=18 ,pid=45097...
{'m': 20}
子進程運行中,name= test,age=18 ,pid=45097...
{'m': 20}
子進程運行中,name= test,age=18 ,pid=45097...
{'m': 20}
子進程運行中,name= test,age=18 ,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=%s" % (os.getpid(), nums))
def work2():
  """子進程要執行的代碼"""
  print("in process2 pid=%d ,nums=%s" % (os.getpid(), 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 ,nums=[11, 22, 0]
in process1 pid=11349 ,nums=[11, 22, 0, 1]
in process1 pid=11349 ,nums=[11, 22, 0, 1, 2]
in process2 pid=11350 ,nums=[11, 22]

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python進程與線程操作技巧總結》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》、《Python+MySQL數據庫程序設計入門教程》及《Python常見數據庫操作技巧匯總》

希望本文所述對大家Python程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三台县| 阳春市| 叙永县| 横峰县| 铜川市| 简阳市| 黎川县| 庆元县| 长阳| 揭阳市| 昆山市| 隆德县| 鹤壁市| 南投市| 徐州市| 永顺县| 游戏| 大庆市| 蒲江县| 朝阳市| 东乡县| 巫溪县| 博白县| 眉山市| 贺州市| 扶绥县| 扬中市| 石台县| 惠来县| 衡山县| 宣化县| 高雄县| 上林县| 萝北县| 新兴县| 依安县| 都兰县| 宁陵县| 丹寨县| 交口县| 驻马店市|