在python中如果想建立多程序需要用到multiprrocessing中的prrocess方法。
在程序之間全域性變數是不共享的,如果要對程序的全域性變數進行使用的話就需要用到multiprrocessing的queue方法
首先我們先建立乙個多程序
import time
from multiprocessing import process
# 程序之間全域性變數不共享
def work_1():
for i in range(10):
print('任務1')
time.sleep(0.5)
def work_2():
for i in range(10):
print('任務2')
time.sleep(0.5)
# 程序執行的時候不加main 為什麼會報錯:
# 在執行過程中相當於在另外乙個py檔案中匯入這個模組並執行函式,由於是匯入模組所以
# 建立多程序的**也會被匯入,然後就又去開了執行緒,陷入無限遞迴的狀態
if __name__ == '__main__':
# 建立兩個程序
p1 = process(target=work_1)
p2 = process(target=work_2)
p1.start()
p2.start()
我們在多程序之間通訊需要用到佇列,但是這個佇列不是queue.queue() 而是multiprrocessing中的queue
queue.queue 是程序內非阻塞佇列
multiprocessing.queue 是跨程序通訊佇列
import requests
from multiprocessing import process, queue
def work_1(q):
while q.qsize() > 0:
url = q.get()
requests.get(url)
print('任務1')
def work_2(q):
while q.qsize() > 0:
url = q.get()
requests.get(url)
print('任務2')
# 將q 這個例項化物件當作引數傳入函式中(不同的程序中),可以實現多程序共享變數,把這個佇列放到乙個公共區間內
p1 = process(target=work_1, args=(q,))
p2 = process(target=work_2, args=(q,))
p1.start()
p2.start()
下面來聊一聊程序池:
pool可以提供指定數量的程序供使用者呼叫,當有新的請求提交到pool中時,如果池還沒有滿,那麼就會建立乙個新的程序用來執行該請求;但如果池中的程序數已經達到規定最大值,那麼該請求就會等待,直到池中有程序結束,才會建立新的程序來它。
import requests
from multiprocessing import pool, manager # 程序池pool manager().queue() # 程序池中的佇列
import time
import os # 檢視程序的pid
# a = manager().queue() # 程序池中的佇列
def work(q):
# 判斷佇列是否有任務
while q.qsize() > 0:
# 獲取任務
url = q.get()
requests.get(url)
print('任務1{}'.format(os.getpid()))
if __name__ == '__main__':
# 程序池中的佇列
q = manager().queue()
for i in range(10):
# 增加任務
# 建立程序池 最大程序數為3
p = pool(3)
for i in range(10):
# 開啟程序執行任務 在程序池中,初始化幾個程序,輪詢執行任務,當乙個任務執行完畢後這個程序會去執行另乙個任務,直到所有任務完成
if q.qsize() > 0:
# 每次迴圈將會用空閒出來的子程序去呼叫目標
p.close() # 程序池使用完畢一定要關閉程序池:停止往程序池中新增新的任務
p.join() # 等待po中所有子程序執行完成,必須在close之後 等待執行緒池中的所有任務都執行完了之後再往下執行
# 非同步處理任務時 : 必須要加上close和join. 程序池的所有程序都是守護程序(主程序**執行結束,守護程序就結束).
看完點贊 ~養成好習慣,以上內容希望對你有幫助,如果對軟體測試、介面測試、自動化測試、面試經驗交流感興趣可以加入我們。642830685,免費領取最新軟體測試大廠面試資料和python自動化、介面、框架搭建學習資料!技術大牛解惑答疑,同行一起交流。 你懂注釋嗎?
由於經常做 走查的緣故,看了很多 不少 看起來注釋很多,函式頭寫的很仔細,很符合公司所謂的規範,但千篇一律,無非就是函式名稱,引數名稱 型別,目的 作者 修改時間 修改內容。不說別的,修改時間和修改內容這些東西,不是 svn這類原始碼控制工具來做的嗎?我個人對這些標準的函式頭深惡痛絕,就像前方 10...
你懂這些嗎?
人的基本禮儀,看看吧,保你學會不少東西 1,別人給倒水時,不要幹看著,要用手扶扶,以示禮貌。2,別人對你說話,你起碼要能接話,不能人家說了上句,你沒了下句,或者一味的說著啊啊啊,是是是。3,有人盯著你看的時候不要直視對方,假裝沒注意到。4,心情不好,再好的護膚品和化妝品也補救不了 5,睡眠不好,會使...
python多程序 python多程序
當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...