你懂Python多程序嗎

2021-10-25 18:41:54 字數 2750 閱讀 5497

在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...