7 2 2 併發多執行緒 開啟程序的兩種方式

2022-05-17 04:11:53 字數 3229 閱讀 8253

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,'

cmz'

,)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

defrunning(name):

print('

%s runninging

' %name)

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

print('

%s running end

' %name)

if__name__ == '

__main__':

#例項化得到四個物件

p1=process(target=running,args=('

cmz1

',)) #

必須加,號

p2=process(target=running,args=('cmz2

',))

p3=process(target=running,args=('cmz3

',))

p4=process(target=running,args=('cmz4

',))

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

p1.start()

p2.start()

p3.start()

p4.start()

print('

主')

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

import

time

import

random

from multiprocessing import

process

class

running(process):

def__init__

(self,name):

super().

__init__

() self.name=name

defrun(self):

print('

%s running

' %self.name)

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

print('

%s running end

' %self.name)

if__name__ == '

__main__':

#例項化得到四個物件

p1=running('cmz1')

p2=running('cmz2')

p3=running('cmz3')

p4=running('cmz4')

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

p1.start() #

start會自動呼叫run

p2.start()

p3.start()

p4.start()

print('

主')

練習

from multiprocessing import

process

n=100 #

在windows系統中應該把全域性變數定義在if __name__ == '__main__'之上就可以了

defwork():

global

n n=0

print('

子程序內:

',n)

if__name__ == '

__main__':

p=process(target=work)

p.start()

print('

主程序內:

',n)

結果是(子程序在開始的時候拷貝了父程序的資料,然後自己又修改了資料。)

主程序內:  100  子程序內:  0

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

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

python3 開啟多執行緒的兩種寫法

寫法一 importtime from threading importthread deffunc name print f 開始 time.sleep 0.5 print f 結束 if name main t1 thread target func,args 執行緒1 t2 thread ta...

2 2 開啟程序的兩種方式

python中的多執行緒無法利用多核優勢,如果想要充分地使用多核cpu的資源 os.cpu count 檢視 在python中大部分情況需要使用多程序。python提供了multiprocessing。multiprocessing模組用來開啟子程序,並在子程序中執行我們定製的任務 比如函式 該模組...