乙個程式執行起來後,**+用到的資源 稱之為程序,它是作業系統分配資源的基本單元。
乙個程序中至少有乙個執行緒。
1、多程序之間不會修改全域性變數,多程序之間共享資源用 訊息佇列(先進先出,後進後出):queue。
2、結論:每個子程序在執行前都會複製乙份主程序**,
多程序之間特別占用資源。
建立程序
(1)、匯入multiprocessing包----->import multiprocessing
(2)、建立程序物件---->p1 = multiprocessing.process(target=子程序名/函式名,arges=(實參,),kwargs=)
(3)、建立程序-----> p1.start()
queue
(1)、建立queue----->q1 = multiprocessing.queue()
(2)寫入到queue----->q1.put()
(3)獲取queue------>q1.get
(4)、判斷queue是否為空------>q1.empty()
(5)、判斷queue是否為滿------->q1.full()
3、多程序之間共享資示例源**:
import multiprocessing
"""結論:每個子程序在執行前都會複製乙份主程序**
通過queue完成了多個程序之間的資料共享,解耦的過程。
"""def download_msg(q):
#模擬資料
gl_num = [11, 22, 33]
for i in gl_num:
q.put(i)
print("資料已存放到佇列中")
def get_msg(q):
wait_data = list()
#從佇列中獲取資料
while true:
if q.empty():
break
print("獲取queue中的資訊為:%s"%wait_data)
def main():
#建立乙個佇列
q = multiprocessing.queue()
# 建立程序物件
p1 = multiprocessing.process(target=download_msg,args=(q,))
p2 = multiprocessing.process(target=get_msg,args=(q,))
#建立程序
p1.start()
p2.start()
if __name__ == '__main__':
main()
4、程序池(pool)
(1)當需要建立的子程序數量不多時,可以直接利用 multiprocessing 中的 process 動態成生多個程序,但如果是上百甚至上千個目標,手動的去建立程序的工作量巨大,此時就可以用到multiprocessing 模組提供的 pool 方法。
(2)初始化 pool 時,可以指定乙個最大程序數,當有新的請求提交到 pool 中時,如果程序池還沒有滿, 那麼就會建立乙個新的程序用來執行該請求; 但如果池中的程序數已經達到指定的最大值,那麼該請求就會等待,直到池中有程序結束,才會用之前的程序來執行新的任務。
pool示例源**:
from multiprocessing import pool
import time
import os
import 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,"執行完畢時長%.2f"%(t_stop-t_start))
#定義乙個程序池,最大程序數是3
po = pool(3)
for i in range(0,10):
#每次迴圈將會用空閒出來的子程序去呼叫目標
print("-------start---------")
po.close() #關閉程序池,關閉後po不再接收新的請求
po.join() #等待po所有的子程序結束完成,必須放在close後面
print("-------end-----------")
python中的程序 Python中程序
程式 程式 編寫完的 稱為程式。程序程序 又稱重量級程序,正在執行中的程式稱為程序。程序的執行會占用記憶體等資源。多個程序同時執行時,每個程序的執行都需要由作業系統按一定的演算法 rr排程 優先數排程演算法等 分配記憶體空間。並行與併發 並行 在多核系統中,每個cpu執行乙個程序,可以理解為cpu的...
Python中的程序
import os import time from multiprocessing import process nums 1,2,3 def wroker1 子程序要執行的 print 程序1中的記憶體位址 s id nums print in process1 pip d,nums s os....
Python中的程序
多程序是真正的並行 python中的gil,多執行緒不是cpu密集型程式的好的選擇 多程序可以繞過gil 多程序可以完全獨立的程序環境中執行程式,可以充分利用多處理器 process類遵循了thread類的api.常用的程序執行緒方法大致相同 所以windows下建立子程序要放入 name main...