多程序鎖、共享記憶體
阿新 • • 發佈:2019-02-01
- 多程序鎖
當我們用多程序來讀寫檔案的時候,如果一個程序是寫檔案,一個程序是讀檔案,如果兩個檔案同時進行,肯定是不行的,必須是檔案寫結束以後,才可以進行讀操作。或者是多個程序在共享一些資源的時候,同時只能有一個程序進行訪問,那就要有一個鎖機制進行控制。
acquire()
locked()
release() //釋放鎖,使用前執行緒必須已獲得鎖定,否則丟擲異常
lock=thread.allocate_lock():生成鎖物件
lock.acquire():加鎖
執行緒使用鎖物件
lock.release(): 執行緒排程釋放鎖
檢視locked()狀態
獲得一把鎖,把對放的鎖釋放
threading 高級別多執行緒模組
threading 不需要程序的控制來控制執行緒
threading.Thread: 類
成員方法:
start() 啟動
run() 重寫
join() 阻塞
getName()
setName()
isDaemon() 判斷執行緒是否隨主執行緒一起結束
setDaemon() 設定執行緒與主執行緒一起結束 - 多程序共享記憶體
python的multiprocessing模組也給我們提供了共享記憶體的操作。
一般的變數在程序之間是沒法進行通訊的,multiprocessing給我們提供了Value和Array模組,他們可以在不通的程序中共同使用。import multiprocessing #lock = multiprocessing.Lock() #lock.acquire() 獲取鎖 #lock.release() 釋放鎖 #with lock: 加鎖 import time # Value() # Array() def add(number,add_value,lock): lock.acquire() try: print("init add{0} number = {1}".format(add_value,number.value)) for i in xrange(1,6): number.value += add_value print("############add{0} has added#######".format(add_value)) time.sleep(1) print("add{0} number = {1}".format(add_value,number.value)) except Exception as e: raise e finally: lock.release() def change(arr): for i in range(len(arr)): arr[i] = -arr[i] if __name__ == "__main__": lock = multiprocessing.Lock() #加鎖 number = multiprocessing.Value('i',0) #共享記憶體 arr = multiprocessing.Array('i',range(10)) #共享記憶體陣列 print(arr[:]) p1 = multiprocessing.Process(target=add,args=(number,1,lock)) p2 = multiprocessing.Process(target=add, args=(number, 3,lock)) p3 = multiprocessing.Process(target=change, args=(arr,)) p1.start() #p1.join() p2.start() ##p2.join() p3.start() #啟動 p3.join() print(arr[:]) print("main end")