import multiprocessing as mul_p
import time
egg1 = 1
def write(egg2, q):
global egg1
print("write全域性變數彩蛋[%s]..." % egg1)
print("write彩蛋[%s]..." % egg2)
egg1 -= 1
print("write全域性變數彩蛋[%s]...原來的彩蛋[1]" % egg1)
# 將修改後的彩蛋1的值放入佇列中去
q.put(egg1)
def read(egg2, q):
global egg1
print("read全域性變數彩蛋[%s]..." % egg1)
print("read彩蛋[%s]..." % egg2)
while true:
# 從佇列中取出 p1 子程序中的 全域性變數彩蛋1 的值
egg1 = q.get()
print("read接收到的write中的全域性變數彩蛋[1]的值:%d" % egg1)
if q.empty():
print("接收完畢...")
break
def main():
# 假設連個程序都需要列印下面這個彩蛋2
egg2 = 2
# ① 建立乙個佇列,可以不填,佇列就可以很大,但有個極限,我們不去考慮它
# 如果填了數字為 x ,則這個佇列可以儲存 x 個資料
q = mul_p.queue()
# ② 建立兩個程序物件
p1 = mul_p.process(target=write, args=(egg2, q,))
p2 = mul_p.process(target=read, args=(egg2, q,))
# ③ 讓兩個子程序開始工作
p1.start()
# 先讓主程序 休息1s 讓 p1 子程序先執行完,不然兩個子程序 爭著執行 列印輸出會亂套
time.sleep(1)
p2.start()
if __name__ == "__main__":
main()
write全域性變數彩蛋[1]...
write彩蛋[2]...
write全域性變數彩蛋[0]...原來的彩蛋[1]
read全域性變數彩蛋[1]...
read彩蛋[2]...
read接收到的write中的全域性變數彩蛋[1]的值:0
接收完畢...
② 各個程序間可以通過queue建立的佇列來傳遞變數,列表,字串值(包括全域性變數的值)
③ 每個程序任務裡的引數,除了全域性變數(函式區域性變數),其餘的引數都需要通過外部實參,傳入到內部形參。
③程序與執行緒之間的關係與區別:
多程序DP 總結
eg 1 方格取數 noip 2000 如果用兩次一般的動歸,可能不能得到最優解。這如同乙個大蘋果加乙個小蘋果還不如兩個中蘋果加在一起。這時就要考慮更改狀態。因為單獨看第乙個人的位置或第二個人的位置並不能組成乙個完整的狀態,但兩個人的位置合起來就是乙個完整的狀態了,所以新的狀態包含了兩個人的位置。新...
Multiprocessing多程序 (總結)
queue的功能是將每個核或執行緒的運算結果放在隊裡中,等到每個執行緒或核執行完畢後再從佇列中取出結果,繼續載入運算。原因很簡單,多執行緒呼叫的函式不能有返回值,所以使用queue儲存多個執行緒運算的結果 import multiprocessing as mp def job q res 0 fo...
多程序的相關知識
案例 context ct this.createpackagecontext com.test.serviceid context.context ignore security 2.1 id不同時候 讀取資源檔案的時候 try catch namenotfoundexception e 2.2....