2 2 開啟程序的兩種方式

2021-09-10 22:24:46 字數 2674 閱讀 3262

python中的多執行緒無法利用多核優勢,如果想要充分地使用多核cpu的資源(os.cpu\_count\(\)檢視),在python中大部分情況需要使用多程序。

python提供了multiprocessing。 multiprocessing模組用來開啟子程序,並在子程序中執行我們定製的任務(比如函式),該模組與多執行緒模組threading的程式設計介面類似。multiprocessing模組的功能眾多:支援子程序、通訊和共享資料、執行不同形式的同步,>提供了process、queue、pipe、lock等元件。

需要再次強調的一點是:與執行緒不同,程序沒有任何共享狀態,程序修改的資料,改動僅限於該程序內。

建立程序的類

process([group [, target [, name [, args [, kwargs]]]]]),由該類例項化得到的物件,可用來開啟乙個子程序

強調:1. 需要使用關鍵字的方式來指定引數

2. args指定的為傳給target函式的位置引數,是乙個元組形式,必須有逗號

引數介紹:

group引數未使用,值始終為none

target表示呼叫物件,即子程序要執行的任務

args表示呼叫物件的位置引數元組,args=(1,2,'egon',)

kwargs表示呼叫物件的字典,kwargs=

name為子程序的名稱

方法介紹:

p.start():啟動程序,並呼叫該子程序中的p.run() 

p.run():程序啟動時執行的方法,正是它去呼叫target指定的函式,我們自定義類的類中一定要實現該方法

p.terminate():強制終止程序p,不會進行任何清理操作,如果p建立了子程序,該子程序就成了殭屍程序,使用該方法需要特別小心這種情況。如果p還儲存了乙個鎖那麼也將不會被釋放,進而導致死鎖

p.is_alive():如果p仍然執行,返回true

p.join([timeout]):主線程等待p終止(強調:是主線程處於等的狀態,而p是處於執行的狀態)。timeout是可選的超時時間。

屬性介紹:

p.daemon:預設值為false,如果設為true,代表p為後台執行的守護程序,當p的父程序終止時,p也隨之終止,並且設定為true後,p不能建立自己的新程序,必須在p.start()之前設定

p.name:程序的名稱

p.pid:程序的pid

注意:在windows中process()必須放到# if __name__ == '__main__':下

建立並開啟子程序的方式一

import time

import random

from multiprocessing import process

def piao(name):

print('%s piaoing' %name)

time.sleep(random.randrange(1,5))

print('%s piao end' %name)

if __name__ == '__main__':

#例項化得到四個物件

p1=process(target=piao,args=('egon',)) #必須加,號

p2=process(target=piao,args=('alex',))

p3=process(target=piao,args=('wupeqi',))

p4=process(target=piao,args=('yuanhao',))

#呼叫物件下的方法,開啟四個程序

p1.start()

p2.start()

p3.start()

p4.start()

print('主')

建立並開啟子程序的方式二

import time

import random

from multiprocessing import process

class piao(process):

def __init__(self,name):

super().__init__()

self.name=name

def run(self):

print('%s piaoing' %self.name)

time.sleep(random.randrange(1,5))

print('%s piao end' %self.name)

if __name__ == '__main__':

#例項化得到四個物件

p1=piao('egon')

p2=piao('alex')

p3=piao('wupeiqi')

p4=piao('yuanhao')

#呼叫物件下的方法,開啟四個程序

p1.start() #start會自動呼叫run

p2.start()

p3.start()

p4.start()

print('主')

python程序開啟的兩種方式

1.1 方式一from multiprocessing import process import time 方式一 def task name print f my name is 啟動時間 time.sleep 2 print f my name is 停止時間 if name main 1 建...

程序理論以及開啟子程序的兩種方式

程序理論 book 現代作業系統 為何開啟子程序需要放在main下面 因為執行到start他會向作業系統發起啟動子程序的訊號,然後作業系統會把整個 塊執行下,找到子程序要執行的任務,執行到最下面,又執行了start,又重複執行一次。執行緒可以不放在main下面是因為執行緒不用匯入主線程裡的東西,他們...

Python 開啟執行緒和程序的兩種方式

開銷 在發生開啟程序給作業系統時,作業系統需要申請記憶體空間給子程序,拷貝父程序位址空間到子程序,而開啟執行緒不需要這些步驟,因此開啟程序開銷遠大於執行緒,開啟速度為執行緒快 位址空間 程序之間位址空間是隔離的,開多個程序,每個程序都有不同的pid,但子程序的資料是來自於拷貝父程序的資料,程序之間存...