我們由淺到深----------深刻了解python中進程創建、使用、管理等等。。。。。。

      網友投稿 779 2025-04-01

      **

      什么是進程?

      **

      1、在早期面向過程設計的計算機結構中,過程是程序的基本執行實體;在當代面向線程設計的計算機體系結構中,進程是線程的容器。它是對指令、數據及其組織形式的描述,過程是程序的實體。多通道程序在執行時需要共享系統資源,這就導致了各個程序在執行過程中相互制約,程序的執行呈現出不連續性的特點。

      2、進程是關于數據集的獨立程序的運行活動。它可以申請并擁有系統資源,這是一個動態概念和活動實體。它不僅是程序的代碼,也是當前活動,由程序計數器的值和處理寄存器的內容表示。

      3、進程是操作系統中最基本、最重要的概念。它是多道程序設計系統出現后引入的一個概念,用來描述系統內部的動態情況,描述系統內部各個程序的活動規律。所有多道程序設計操作系統都基于該過程。過程的本質是多通道程序系統中程序的執行過程。該過程是動態生成的,并動態終止。

      看到上面的進程解釋是不是非常的暈,事實上我看著也很暈,下面我們就來了解什么是進程吧。

      在我看來進程是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎,進程是程序的實體。進程就是程序。

      下面讓我們用例子來說明一下什么是進程及python中進程如何使用的

      **

      進程例子,了解進程創建和分配

      **

      # TODO 導入進程的包 import multiprocessing # 進程包 import time # 1.work1 def work(): for i in range(5): print("work正在工作中.....") time.sleep(0.2) # 2.work2 def work2(): for i in range(5): print("work2正在工作中......") time.sleep(0.2) if __name__=="__main__": # TODO 主進程 # TODO 兩個子進程 work_process=multiprocessing.Process(target=work,name="work1Process") work2_process=multiprocessing.Process(target=work2) # 啟動子進程任務 work_process.start() work2_process.start()

      運行結果:

      work正在工作中..... work2正在工作中...... work2正在工作中......work正在工作中..... work正在工作中..... work2正在工作中...... work2正在工作中...... work正在工作中..... work2正在工作中...... work正在工作中.....

      運行結果:

      work2正在工作中...... work正在工作中..... work正在工作中.....work2正在工作中...... work2正在工作中......work正在工作中..... work2正在工作中......work正在工作中..... work正在工作中.....work2正在工作中......

      你多次運行會發現每次的運行結果基本上都不相同,是不是很奇怪,那是因為進程是隨機分配的,毫無規律可言。

      進程有主進程和子進程。例如一個程序中的主函數是最先執行的,調度和分配函數,那么主進程就是主函數**if __name__=="__main__":,子進程就是被調度(調用)的函數work():和work2()**,主線程起到控制子線程的作用。

      想要更好的了解代碼就要了解進程代碼中各個元素的含義,下面讓我們來一起看一下。

      work_process=multiprocessing.Process(target=work,name="work1Process") work2_process=multiprocessing.Process(target=work2)

      這兩行代碼,兩行都是主函數(主進程)分配兩個子進程(被調用的函數)****【也可以成為程序中除主函數的其他函數】,target是進程執行的目標函數,也就是這個進程分配的對象,name是進程的名字(不寫就默認),可寫可不寫,不過方便后面查看進程的名字我們將第一個子進程起一個名字。

      work_process.start()

      start 開啟進程,work_process是前面創建(分配)進程的名字,work_process.start()即為開啟創建的work_process進程。

      **

      獲取進程編號

      **

      multiprocessing.current_process() 獲取當前進程的名字(name)

      os.getppid() 獲取父進程

      注意:使用os.getppid()要先引入os包(import os),os包一般用于對文件的處理。

      import os # 一般用于文件處理 import multiprocessing # 進程包 import time # 1.work1 def work(): print("當前work:",os.getpid()) # TODO 當前的進程名 print("work:",multiprocessing.current_process()) # TODO 獲取父進程 print("work的父進程是:",os.getppid()) for i in range(5): print("work正在工作中.....") time.sleep(0.2) # 2.work2 def work2(): for i in range(5): # TODO 當前的進程名 print("work2:", multiprocessing.current_process()) # TODO 獲取父進程 print("work2的父進程是:", os.getppid()) print("當前work2:", os.getpid()) print("work2正在工作中......") time.sleep(0.2) if __name__=="__main__": # TODO 主進程 print("main:",os.getpid()) # TODO 兩個子進程 work_process=multiprocessing.Process(target=work,name="work1Process") work2_process=multiprocessing.Process(target=work2) # 啟動子進程任務 work_process.start() work2_process.start() multiprocessing.Process()

      運行結果:;

      main: 12700 當前work:work2: 31648 work: work的父進程是: 12700 work2的父進程是: work正在工作中.....12700 當前work2: 31856 work2正在工作中...... work正在工作中..... work2: work2的父進程是: 12700 當前work2: 31856 work2正在工作中...... work正在工作中..... work2: work2的父進程是: 12700 當前work2: 31856 work2正在工作中...... work正在工作中..... work2: work2的父進程是: 12700 當前work2: 31856 work2正在工作中...... work正在工作中..... work2: work2的父進程是: 12700 當前work2: 31856 work2正在工作中...... Process finished with exit code 0

      我們可以清晰地發現進程的名字和當前進程的父進程。****work1Process和Process-2,**前者是我們自己起的名字,如果沒有起會默認為Process-1。進程一旦分配除非遇到內存限制,資源不夠等特殊情況(程序不能繼續執行下去),進程會一直運行下去且進程名不變。也就是說進程名會和我們的名字一樣,出生到死亡一輩子都是這個名字,中途改名對應的就是計算機所發生的特殊情況(內存不夠、程序出錯等原因)

      **

      進程執行帶有參數的任務

      **

      進程執行傳參操作,字典、元組等,為后面大型項目做鋪墊,可能現在的項目單個進程和多個進程還沒有很好的體現,但是后面隨著項目規模的變大,你會很好的發現單進程和多進程的區別。所以了解進程十分重要

      元組傳參,

      import os # 一般用于文件處理 import multiprocessing # 進程包 import time # 1.work1 def work(count,number): print("當前work:",os.getpid()) # TODO 當前的進程名 print("work:",multiprocessing.current_process()) # TODO 獲取父進程 print("work的父進程是:",os.getppid()) for i in range(5): print("work正在工作中.....") time.sleep(0.2) ## 2.work2 # def work2(count,number): # for i in range(5): # # TODO 當前的進程名 # print("work2:", multiprocessing.current_process()) # # TODO 獲取父進程 # print("work2的父進程是:", os.getppid()) # print("當前work2:", os.getpid()) # print("work2正在工作中......") # time.sleep(0.2) if __name__=="__main__": # TODO 主進程 print("main:",os.getpid()) # TODO 兩個子進程 work_process=multiprocessing.Process(target=work,args=(5,10)) # work2_process=multiprocessing.Process(target=work2,kwargs={"count":5,"number":10}) # 啟動子進程任務 work_process.start() # work2_process.start() multiprocessing.Process()

      運行結果:

      main: 11896 當前work: 23728 work: work的父進程是: 11896 work正在工作中..... work正在工作中..... work正在工作中..... work正在工作中..... work正在工作中.....

      元組傳參就是主進程將數據以元組的方式傳遞給子進程,類似于python中調用一個函數,通過元組的方式傳參。不太理解的可以去了解一下Python的傳參過程,很重要,想要掌握python就必須要掌握它。

      元組格式 (1,5,3)、(“小紅”,“小花”,“18”)、(2,)

      注意:一個元素是要加一個逗號

      python中的元素交換

      a,b=b,a

      這樣就可以交換a,b的值

      字典傳參

      import os # 一般用于文件處理 import multiprocessing # 進程包 import time # 1.work1 # def work(count,number): # print("當前work:",os.getpid()) # # TODO 當前的進程名 # print("work:",multiprocessing.current_process()) # # # TODO 獲取父進程 # print("work的父進程是:",os.getppid()) # for i in range(5): # print("work正在工作中.....") # time.sleep(0.2) # 2.work2 def work2(count,number): for i in range(5): # TODO 當前的進程名 print("work2:", multiprocessing.current_process()) # TODO 獲取父進程 print("work2的父進程是:", os.getppid()) print("當前work2:", os.getpid()) print("work2正在工作中......") time.sleep(0.2) if __name__=="__main__": # TODO 主進程 print("main:",os.getpid()) # TODO 兩個子進程 # work_process=multiprocessing.Process(target=work,args=(5,10)) work2_process=multiprocessing.Process(target=work2,kwargs={"count":5,"number":10}) # 啟動子進程任務 # work_process.start() work2_process.start()

      time.sleep(0.2) 休息0.2s,如果不休息0.2s你會發現太順暢,結果一下子就出來了,休息0.2s可以更好地看清楚進程運行

      運行結果:

      main: 18372 work2: work2的父進程是: 18372 當前work2: 13016 work2正在工作中...... work2: work2的父進程是: 18372 當前work2: 13016 work2正在工作中...... work2: work2的父進程是: 18372 當前work2: 13016 work2正在工作中...... work2: work2的父進程是: 18372 當前work2: 13016 work2正在工作中...... work2: work2的父進程是: 18372 當前work2: 13016 work2正在工作中...... Process finished with exit code 0

      字典傳參就是主進程將數據以字典的方式傳遞給子進程,類似于python中調用一個函數,通過字典的方式傳參。不太理解的可以去了解一下Python的傳參過程,很重要,想要掌握python就必須要掌握它。 **字典和元組都是python常見的兩種格式,其中字典是以鍵對值存在的,就是一把藥匙一個門,鍵就是藥匙,值就是門,可能一把藥匙可以開n個門,但是一個門不可能同時存在多個藥匙。也就是說,鍵不可以重復,是唯一的,但是值可以重復。所以通常可以通過鍵去提取值。**上文提點傳參就是將數據以字典的形式傳出去。

      只要是進程你反復運行結果都是不一樣的,因為進程是系統隨機分配的,基本上不可能重復,如果你反復運行是重復的,恭喜你,你可以買彩票了,別忘了叫上我。

      注意:

      守護主進程

      deamo = True

      子進程銷毀

      讓我們由淺到深----------深刻了解python中進程創建、使用、管理等等。。。。。。

      terminate

      退出進程

      exit()

      常用屬性

      name:當前進程起別名,默認為Process-1,依次遞增

      實例方法:

      start()

      啟動子進程實例(創建子進程)

      join()

      等待子進程執行結束

      terminate()

      不管任務是否執行完畢,立即終止子進程.

      希望這篇文章對大家有所幫助

      Python 任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:wps表格分頁怎么辦?
      下一篇:如何根據Excel中的某些條件查找或選擇單元格?
      相關文章
      亚洲av无一区二区三区| 亚洲色最新高清av网站| 相泽南亚洲一区二区在线播放| 亚洲粉嫩美白在线| 亚洲六月丁香六月婷婷蜜芽| 亚洲欧洲尹人香蕉综合| 亚洲妓女综合网99| 亚洲国产日韩在线| 亚洲一级黄色大片| 亚洲一级片在线播放| 亚洲第一区二区快射影院| 亚洲色偷偷色噜噜狠狠99| 亚洲爆乳成av人在线视菜奈实 | 亚洲?V乱码久久精品蜜桃| 综合偷自拍亚洲乱中文字幕| 久久亚洲精品无码网站| 亚洲福利在线播放| 亚洲小说区图片区另类春色| 亚洲精品国产美女久久久| 亚洲AV无码精品色午夜果冻不卡| 亚洲伦另类中文字幕| 亚洲视频一区在线观看| 亚洲最大中文字幕| 在线综合亚洲中文精品| 亚洲AV综合色区无码一二三区| 免费观看亚洲人成网站| 国内精品99亚洲免费高清| 亚洲精品无码专区久久久| 亚洲av片劲爆在线观看| 久久久无码精品亚洲日韩京东传媒| 亚洲精品美女久久久久9999| 亚洲AV成人无码天堂| 亚洲色成人网站WWW永久四虎 | 日本中文一区二区三区亚洲| 亚洲中久无码不卡永久在线观看| 亚洲中文字幕无码中文字在线 | 亚洲综合色一区二区三区小说| 亚洲人成网网址在线看| 亚洲另类自拍丝袜第五页| 亚洲国产V高清在线观看| 曰韩亚洲av人人夜夜澡人人爽|