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 接收完畢...
① 各個進程間全局變量的值是 不共享 的python
② 各個進程間能夠經過 Queue 建立的隊列來傳遞變量,列表,字符串值(包括全局變量的值)函數
③ 每一個進程任務裏的參數,除了 全局變量(函數局部變量),其他的參數都須要經過外部實參,傳入到內部形參。線程
③ 進程與線程之間的關係與區別:code