python多程序及程序池詳解及語法實現

2021-09-18 06:43:05 字數 3231 閱讀 7361

程式與程序的區別

程式:** 二進位制 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...