一、multiprocessing模組介紹
python中的多執行緒無法利用cpu資源,在python中大部分情況使用多程序。python中提供了非常好的多程序包multiprocessing。
multiprocessing模組用來開啟子程序,並在子程序中執行功能(函式),該模組與多執行緒模組threading的程式設計介面類似。
multiprocessing的功能眾多:支援子程序、通訊和共享資料、執行不同形式的同步,提供了process、queue、pipe、lock等元件。
二、process類的介紹
1.建立程序的類
process([group [, target [, name [, args [, kwargs]]]]]),由該類例項化得到的物件,表示乙個子程序中的任務(尚未啟動)2.引數介紹強調:1. 需要使用關鍵字的方式來指定引數
2. args指定的為傳給target函式的位置引數,是乙個元組形式,必須有逗號
1 group引數未使用,值始終為none3.方法介紹2 3 target表示呼叫物件,即子程序要執行的任務
4 5 args表示呼叫物件的位置引數元組,args=(1,2,'egon',)
6 7 kwargs表示呼叫物件的字典,kwargs=
8 9 name為子程序的名稱
1 p.start():啟動程序,並呼叫該子程序中的p.run()4.屬性介紹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開啟的程序
p.daemon:預設值為false,如果設為true,代表p為後台執行的守護程序,當p的父程序終止時,p也隨之終止,並且設定為true後,p不能建立自己的新程序,必須在p.start()之前設定三、process類的使用p.name:程序的名稱
p.pid:程序的pid
p.exitcode:程序在執行時為none、如果為–n,表示被訊號n結束(了解即可)
p.authkey:程序的身份驗證鍵,預設是由os.urandom()隨機生成的32字元的字串。這個鍵的用途是為涉及網路連線的底層程序間通訊提供安全性,這類連線只有在具有相同的身份驗證鍵時才能成功(了解即可)
一定要把開程序的**寫在if __name__=='__main__':下面
開乙個程序和主程序是併發的關係,我start一下就是先告訴作業系統我要開乙個程序
,然而它不會等待,他會去執行下面的**,完了他吧程序開始後,就開始執行了
strat():方法的功能
1.開啟程序
2.執行功能
四、開啟程序的兩種方式
from multiprocessing import process2 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 processgetppid()父程序id2 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())
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並行 同時在一起執...