日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python进程multiprocessing. Process()的使用

發布時間:2024/4/11 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python进程multiprocessing. Process()的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.進程概念

進程是資源分配的最小單位,程序隔離的邊界。

CPU的時間片輪轉,在不同的時間段切換執行不同的進程,但是切換進程是比較耗時的;就引來了輕量級進程,也就是所謂的線程,一個進程中包括多個線程(代碼流,其實也就是進程中同時跑的多個方法體)

  • 程序:例如xxx.py這是程序,是一個靜態的
  • 進程:一個程序運行起來后,代碼+用到的資源 稱之為進程,它是操作系統分配資源的基本單元。

2.進程的狀態

工作中,任務數往往大于cpu的核數,即一定有一些任務正在執行,而另外一些任務在等待cpu進行執行,因此導致了有了不同的狀態

  • 就緒態:運行的條件都已經滿足,正在等在cpu執行
  • 執行態:cpu正在執行其功能
  • 等待態:等待某些條件滿足,例如一個程序sleep了,此時就處于等待態

3.進程的創建-multiprocessing

multiprocessing模塊就是跨平臺版本的多進程模塊,提供了一個Process類來代表一個進程對象,這個對象可以理解為是一個獨立的進程,可以執行另外的事情。

方法說明:

創建子進程跟創建線程十分類似,只需要傳入一個執行函數和函數的參數,創建一個Process實例,用start()方法啟動。

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(進程號)

代碼示例:

import multiprocessing import timedef work1():for i in range(10):print("work1----", i)time.sleep(0.5)if __name__ == '__main__':# 創建進程# 1. 導入 multiprocessing 模塊# 2. multiprocessing.Process() 創建子進程# 3. start() 方法啟動進程p1 = multiprocessing.Process(group=None, target=work1)p1.start()for i in range(10):print("這是主進程", i)time.sleep(0.5)

4.進程名稱獲取

multiprocessing.current_process()

5. 獲取進程pid

有兩種方法可以獲取
1)multiprocessing.current_process().pid
2)使用import os模塊的getpid()

import multiprocessing import time import osdef work():# 獲取進程的名稱print(multiprocessing.current_process())# 獲取進程的pidprint(multiprocessing.current_process().pid, os.getpid())i = 0while i < 10:print("work中執行", i)time.sleep(0.5)i = i + 1if __name__ == '__main__':# 獲取進程的pidprint(multiprocessing.current_process())# 創建子進程process1 = multiprocessing.Process(group=None, target=work)process1.start()i = 0while i < 10:print("我在主線程中執行",i)time.sleep(0.3)i = i + 1


獲取父id: getppid() 獲取父進程id

6.子進程參數傳遞

給子進程傳遞參數方法和給子線程傳遞參數方法基本一致!

7.進程間不共享全局變量

import multiprocessing # 定義全局變量 num = 100# 定義work方法,設置num1的值 def work():global num # 在函數內部聲明使用全局變量numnum = num + 1 # 對num值進行+1print("work num = %d" % num)# 定義work2方法,獲取num1的值 def work2():print("work2 num = %d" % num)if __name__ == '__main__':# 創建子進程process1 = multiprocessing.Process(group=None, target=work, name="MyProcess")process1.start()# 創建第二個子進程process2 = multiprocessing.Process(group=None, target=work2, name="MyProcess2")process2.start()

運行結果:

work num = 101
work2 num = 100

由運行結果可以看出,work函數對num1的修改,在work2中并沒有獲取到,而還是原來的100,所以,進程之間是不能夠共享變量的

8.守護主進程

import multiprocessing import timedef sub_process():for i in range(10):print("子進程運行中", i)time.sleep(0.5)if __name__ == '__main__':# 創建子進程p1 = multiprocessing.Process(group=None, target=sub_process, name="p1")# 設置守護主進程# 第一種方式:# p1.daemon = True# 第二種方式(最好在退出exit()前一句使用):# p1.terminate()# 啟動p1.start()time.sleep(2)print("OVER!")p1.terminate()exit()

總結

以上是生活随笔為你收集整理的Python进程multiprocessing. Process()的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。