程式與程序的區別
程式:** 二進位制 exe 靜態
程序:程式執行後 資源+** 動態
程序的流程:
寫時拷貝:
程序中,子程序修改時拷貝影響的**資源,不修改時不拷貝僅執行
建立程序流程:
# 匯入程序模組
import multiprocessing
# 建立乙個程序的實力物件
p = multiprocessing.process(target=func_name[,args=(元組), kwargs=])
# 建立並啟動程序
p.start()
p.join(5)
建立程序示例:
import time
import multiprocessing
def test1():
while true:
print("---1---")
time.sleep(1)
def test2():
while true:
print("---2---")
time.sleep(1)
def main():
p1 = multiprocessing.process(target=test1)
p2 = multiprocessing.process(target=test2)
p1.start()
p2.start()
if __name__ == '__main__':
main()
注:
獲取pid:
注:檔案 儲存中
socket 網路中
queue佇列 記憶體中 解耦 (multiprocessing)
queue佇列完成程序間通訊流程:
# 建立乙個佇列
q = multiprocessing.queue(3) # 3代表佇列中最多可以接收三條訊息
# 向佇列中新增資料
q.put(data)
# 從佇列中取資料
q.get()
# 判斷佇列中是否為空
q.empty()
# 判斷佇列中是否已滿
q.full()
注意:如果是通過程序池建立的程序,那麼佇列的使用要用
multiprocessing.manager().queue()的方式,否則會報錯。
queue建立示例:
import multiprocessing
def download_from_web(q):
data = [11,22,33,44]
# 向佇列中寫入資料
for temp in data:
q.put(temp)
def analysis_data(q):
"""資料處理"""
waitting_analysis_data = list()
# 從佇列中獲取資料
while true:
data =q.get()
if q.empty():
break
# 模擬資料處理
print(waitting_analysis_data)
def main():
# 建立乙個佇列
q = multiprocessing.queue()
# 建立多個程序,將佇列的引用當做實參進行傳參
p1 = multiprocessing.process(target=download_from_web,args=(q,))
p2 = multiprocessing.process(target=analysis_data,args=(q,))
p1.start()
p2.start()
if __name__ == '__main__':
main()
程序池建立流程:
# 匯入程序池模組
from multiprocessing import pool
# 定義程序池,最大程序池最大數
po = pool(3)
# 關閉程序池
po.close()
# 等待程序池執行完畢
po.join()
注:
程序池建立演示:
from multiprocessing import pool
import os, time, random
def worker(msg):
t_start = time.time()
print("%s開始執行,程序號為%d" % (msg, os.getpid()))
# random.random()隨機生成0~1之間的浮點數
time.sleep(random.random() * 2)
t_stop = time.time()
print(msg, "執行完畢,耗時%0.2f" % (t_stop - t_start))
if __name__ == '__main__':
po = pool(3) # 定義乙個程序池,最大程序數3
for i in range(0, 10):
# 每次迴圈將會用空閒出來的子程序去呼叫目標
print("----start----")
po.close() # 關閉程序池,關閉後po不再接收新的請求
po.join() # 等待po中所有子程序執行完成,必須放在close語句之後
print("-----end-----")
區別:執行緒占用資源小,共享全域性變數;程序占用資源多,每個子程序多占用一部分資源,但不共享全域性變數。
優缺點:執行緒執行開銷小,但不利於資源的管理和保護;而程序正相反。
python多程序之程序池
在利用python進行系統管理的時候,特別是同時操作多個檔案目錄,或者遠端控制多台主機,並行操作可以節約大量的時間。當被操作物件數目不大時,可以直接利用multiprocessing中的process動態成生多個程序,十幾個還好,但如果是上百個,上千個目標,手動的去限制程序數量卻又太過繁瑣,此時可以...
python 多程序 高階 程序池
如果需要啟動大量的子程序,使用程序池批量建立子程序的方式更加常見,因為當被操作對物件數目不大時,可以直接利用multiprocessing中的process動態生成多個程序,如果數量大,此時就應該使用pool。pool 可以提供指定數量的程序供使用者呼叫,預設大小是cpu的核數。當有新的請求提交到p...
Python多程序 程序池pool
from multiprocessing import process,pool import time defselect time.sleep 1 print time.ctime return 這是每個進行執行完後返回的值,該值會會被 callback函式接收 def foo args pri...