仔細說來,multiprocess不是乙個模組而是python中乙個操作、管理程序的包。 之所以叫multi是取自multiple的多功能的意思,在這個包中幾乎包含了和程序有關的所有子模組。由於提供的子模組非常多,為了方便大家歸類記憶,我將這部分大致分為四個部分:建立程序部分,程序同步部分,程序池部分,程序之間資料共享。
process模組介紹
process模組是乙個建立程序的模組,借助這個模組,就可以完成程序的建立。
1.第一種:
import2. 第二種osfrom multiprocessing import
process
def func(*args):
(args)
print('
子程序'
,os.getpid())
print('
子程序的父程序
',os.getppid())
if__name__ == '
__main__':
p = process(target=func,args=('
引數1','
引數2'
)) p.start()
p.join()
#感知乙個子程序的結束,將非同步的程式改為同步
print('
主程序'
, os.getpid())
print('
主程序的父程序
', os.getppid())
import建立多個子程序osfrom multiprocessing import
process
class
myprocess(process):
def__init__
(self,args1,args2):
super().
__init__
()
#process.__init__(self)
self.args1 =args1
self.args2 =args2
defrun(self):
print(111)
(self.args1)
(self.args2)
(self.pid)
if__name__ == '
__main__':
p = myprocess('
引數1','
引數2'
) p.start()
print(os.getpid())
importosfrom multiprocessing import
process
deffunc(filename,count):
with open(filename,'w
',encoding='
utf-8
') as f:
f.write(count*10*'*'
)if__name__ == '
__main__':
p_list =
for i in range(10):
p = process(target=func,args=('
userinfo%d
'%i,i))
p.start()
[p.join()
for p in
p_list]
print([i for i in os.walk(r'
e:\python10\day37
')])
importview codeosimport
time
from multiprocessing import
process
deffunc():
global
n n =0
print('
pid:%s
'%os.getpid(),n)
if__name__ == '
__main__':
n = 100p= process(target=func)
p.start()
p.join()
print(n)
import加鎖可以保證多個程序修改同一塊資料時,同一時間只能有乙個任務可以進行修改,即序列的修改,沒錯,速度是慢了,但犧牲了速度卻保證了資料安全。osimport
time
from multiprocessing import
process
deffunc():
while
true:
print('
子程序開始')
time.sleep(1)
print('
***我還在執行')
if__name__ == '
__main__':
p = process(target=func)
p.daemon =true
p.start()
p1 = process(target=func)
p1.start()
p1.terminate()
(p1.is_alive())
time.sleep(5)
print(p1.is_alive())
雖然可以用檔案共享資料實現程序間通訊,但問題是:
1.效率低(共享資料基於檔案,而檔案是硬碟上的資料)
2.需要自己加鎖處理
因此我們最好找尋一種解決方案能夠兼顧:
1、效率高(多個程序共享一塊記憶體的資料)
2、幫我們處理好鎖問題。這就是mutiprocessing模組為我們提供的基於訊息的ipc通訊機制:佇列和管道。 佇列和管道都是將資料存放於
記憶體中 佇列又是基於(管道+鎖)實現的,可以讓我們從複雜的鎖問題中解脫出來, 我們應該盡量避免使用共享資料,盡可能使用訊息傳遞
和佇列,避免處理複雜的同步和鎖問題,而且在程序數目增多時,往往可以獲得更好的可獲展性。
importtime
import
json
from multiprocessing import
process
from multiprocessing import
lock
defshow_ticket(i):
with open(
'ticket
') as f:
dic =json.load(f)
print('
餘票:%s
'%dic['
ticket'])
defbuy_ticket(i,lock):
lock.acquire()
with open(
'ticket
') as f:
dic =json.load(f)
print('
餘票:%s
' % dic['
ticket'])
time.sleep(0.1)
if dic['
ticket
'] >0:
dic[
'ticket
'] -= 1
print('
\033[32m%s買到票了\033[0m
'%i)
else
:
print('
\033[31m%s買到票了\033[0m
'%i)
time.sleep(0.1)
with open(
'ticket
','w
') as f:
json.dump(dic,f)
lock.release()
if__name__ == '
__main__':
for i in range(10):
p = process(target=show_ticket,args=(i,))
p.start()
lock =lock()
for j in range(10):
p = process(target=buy_ticket,args=(j,lock))
p.start()
python併發程式設計 程序,併發
1.程序是乙個正在執行的程式,或者說是程式執行的過程,程序是個抽象概念 程序起源於作業系統,是作業系統最核心的概念,作業系統所有其他的概念都是圍繞程序展開 研究程序最底層就是在研究作業系統底層 2.序列 程序 乙個任務完完整整的執行完畢後,在執行下乙個任務 3.併發 程序 看起來多個任務是同時執行即...
Python併發程式設計 程序
1.意義 充分利用計算機多核資源,提高程式的執行效率。2.實現方案 多程序 多執行緒 3.並行與併發 1.定義 程式在計算機中的一次執行。2.系統中如何產生乙個程序 使用者空間通過呼叫程式介面或者命令發起請求 作業系統接收使用者請求,開始建立程序 作業系統調配計算機資源,確定程序狀態等 作業系統將建...
python併發程式設計 多程序
import os import time from multiprocessing import process def func args,args2 print args,args2 time.sleep 3 print 子程序 os.getpid print 子程序的父程序 os.getpp...