python支援的程序與執行緒

2022-05-28 21:33:20 字數 4409 閱讀 3701

一、multiprocessing模組介紹

python中的多執行緒無法利用cpu資源,在python中大部分情況使用多程序。python中提供了非常好的多程序包multiprocessing。

multiprocessing模組用來開啟子程序,並在子程序中執行功能(函式),該模組與多執行緒模組threading的程式設計介面類似。

multiprocessing的功能眾多:支援子程序、通訊和共享資料、執行不同形式的同步,提供了process、queue、pipe、lock等元件。

二、process類的介紹

1.建立程序的類

process([group [, target [, name [, args [, kwargs]]]]]),由該類例項化得到的物件,表示乙個子程序中的任務(尚未啟動)

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

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

2.引數介紹

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

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

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

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

8 9 name為子程序的名稱

3.方法介紹

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

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

3 4 p.terminate():強制終止程序p,不會進行任何清理操作,如果p建立了子程序,該子程序就成了殭屍程序,使用該方法需要特別小心這種情況。

如果p還儲存了乙個鎖那麼也將不會被釋放,進而導致死鎖

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

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

需要強調的是,p.join只能join住start開啟的程序,而不能join住run開啟的程序

4.屬性介紹

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

p.name:程序的名稱

p.pid:程序的pid

p.exitcode:程序在執行時為none、如果為–n,表示被訊號n結束(了解即可)

p.authkey:程序的身份驗證鍵,預設是由os.urandom()隨機生成的32字元的字串。這個鍵的用途是為涉及網路連線的底層程序間通訊提供安全性,這類連線只有在具有相同的身份驗證鍵時才能成功(了解即可)

三、process類的使用

一定要把開程序的**寫在if __name__=='__main__':下面

開乙個程序和主程序是併發的關係,我start一下就是先告訴作業系統我要開乙個程序

,然而它不會等待,他會去執行下面的**,完了他吧程序開始後,就開始執行了

strat():方法的功能

1.開啟程序

2.執行功能

四、開啟程序的兩種方式

from multiprocessing import process

2 import time

3 import random

4 def piao(name):

5 print('%s is piaoing'%name)

6 time.sleep(random.randint(1,3))

7 print('%s is piao end'%name)

8 if __name__ =='__main__':

9 p1 = process(target=piao,kwargs=)

10 p2 = process(target=piao,kwargs=)

11 p3 = process(target=piao,kwargs=)

12 p1.start()

13 p2.start()

14 p3.start()

15 print('主程序')

from multiprocessing import process

2 import time

3 import random

4 import os

5 class piao(process):

6 def __init__(self,name):

7 super().__init__() #必須繼承父類的一些屬性

8 self.name = name

9 def run(self): #必須得實現乙個run方法

10 print(os.getppid(),os.getpid())

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

12 time.sleep(random.randint(1,3))

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

14 if __name__ =='__main__':

15 p1 = piao('alex')

16 p2 = piao('wupeiqi')

17 p3 = piao('yuanhao')

18 p1.start()

19 p2.start()

20 p3.start()

21 print('主程序',os.getpid())

getppid()父程序id

getpid() #當前程序id

五、多程序實現套接字併發

from socket import *

2 from multiprocessing import process

3 s = socket(af_inet,sock_stream)

4 s.setsockopt(sol_socket,so_reuseaddr,1)

5 s.bind(('127.0.0.1',8081))

6 s.listen(5)

7 print('start running...')

8 def talk(coon,addr):

9 while true:

10 try:

11 data = coon.recv(1024)

12 if not data: break

13 coon.send(data.upper())

14 except exception:

15 break

16 coon.close()

17 18 if __name__ == '__main__':

19 while true:

20 coon,addr = s.accept()

21 print(coon,addr)

22 p =process(target=talk,args=(coon,addr))

23 p.start()

24 s.close()

from socket import *

2 c = socket(af_inet,sock_stream)

3 c.connect(('127.0.0.1',8081))

4 while true:

5 cmd = input('>>:').strip()

6 if not cmd:continue

7 c.send(cmd.encode('utf-8'))

8 data = c.recv(1024)

9 print(data.decode('utf-8'))

10 c.close()

python支援的程序與執行緒

一 multiprocessing模組介紹 python中的多執行緒無法利用cpu資源,在python中大部分情況使用多程序。python中提供了非常好的多程序包multiprocessing。multiprocessing模組用來開啟子程序,並在子程序中執行功能 函式 該模組與多執行緒模組thre...

Python的執行緒與程序

程序是資源分配的最小單位,執行緒是cpu排程的最小單位。執行緒可以讓應用程式併發的執行多個任務,執行緒之間方便共享資源,程序之間資訊難以共享。引用知乎大佬的比喻,程序 火車,執行緒 車廂 簡單使用from concurrent.futures import threadpoolexecutor im...

Python的執行緒與程序

三 執行緒 四 守護執行緒 總結在實際運用中python程式往往要處理多個任務,那麼如何讓python程式執行多工呢?這就用到了執行緒和程序,執行緒和程序又各有特點,下面就進一步闡述執行緒和程序 1.1.多工就是同一時間,多個任務 1.2.併發 在一段時間內交替執行多個任務 1.3並行 同時在一起執...