python 是一種非常流行的程式語言,但是python 的效率卻並不是非常的理想,這時候就非常有必要使用多程序來提高python 的執行效率。
匯入多程序的模組
from multiprocessing import process # 多程序模組
from multiprocessing import current_process # 獲取當前程序號
import time
建立多個程序
方式一:
# 定義乙個多程序執行的函式
deffun
(n):
time.sleep(3)
# 設定乙個延時觀察多程序的運**況
print
("{}"
.format
(n))
print
("當前程序號:"
,current_process(
).pid)
# 列印當前的程序號
if __name__ =
"__main__"
: p = process(target=fun,args=(3
,))# 輸入的引數設定,如果只是乙個引數時候必須加上逗號,不然會被解析為乙個字串或者數字
p.start(
)# 建立乙個程序的記憶體空間
p.join(
)# 阻塞程序,等待子程序執行完成之後,再繼續執行朱金城**
print
("主程序執行結束,程序號{}"
.format
(current_process(
).pid)
)# 檢視主程序號
方式二:
建立多個程序
class
myprocess
(process)
:# 繼承多程序的模組
defrun
(self)
:# 替換多程序類中的run 函式
print
("start myprocess"
) time.sleep(2)
print
("end myprocess"
)if __name__ =
"__main__"
: p = myprocess(
)# 建立乙個子程序
p.start(
) p.join(
)# 阻塞子程序等待子程序執行結束
print
("主程序執行結束"
)
ps: 檢視當前程序號的另一種方法
import os
os.getpid();
# 當前程序的程序號
os.getppid();
# 當前程序的父程序的程序號
程序之間資料一般不能相互互動,需要相互互動時候,需要使用到第三方介質或者匯入其他第三方庫進行獲取。
總結:1.多個程序在記憶體中分別擁有著不同的區域,程序之間互不影響,同時也導致是資料不能共享。
2.多個程序分配到記憶體之後,幾乎同時執行,不需要等待前面的結束才進行後面的程序,非同步執行**。
3、多程序由於同時執行,導致在讀取資料以及修改資料時候會出現問題,新增互斥鎖,使得乙個時間點內只能有乙個程序在修改資料,不會導致資料出現邏輯上的錯誤(將併發資料轉變成為序列,犧牲效率,但是保證資料的安全)
from multiprocessing import process, lock
import json
defchange
(i):
with
open
("data.json"
,"w"
)as f:
json.dump(f,
)# 修改邏輯資料
defrun
(i,mutex)
: mutex.acquire(
)# 搶鎖
change(i)
mutex.release(
)# 釋放鎖
mutex = lock(
)# 新建一把互斥鎖
for i in
range(1
,10):
p = process(target=run,args=
(i,mutex)
) p.start(
)
多執行緒與多程序 執行效率
1 多執行緒在單核和多核cpu上的執行效率問題的討論 多執行緒在單cpu中其實也是順序執行的,不過系統可以幫你切換哪個執行而已,其實並沒有快 反而慢 多個 cpu的話就可以在多個 cpu中同時執行了。單核 cpu時使用多執行緒,通常是有執行緒要處於等待狀態。而對於普通的進度條更新類的,能夠簡單控制的...
python多程序 python多程序
當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...
提高python執行效率的方法
python上手很容易,但是在使用過程中,怎麼才能使效率變高呢?下面說一下提高python執行效率的方法,這裡只是說一點,python在引入模組過程中提高效率的方法。例如 1.我們要使用os模組中的某個屬性,那我們可以單獨引入os中某個屬性 from os import version 同樣的我們也...