python multiprocessing lock_python多进程Lock锁
無論是使用多線程或者多進程都會涉及資源的爭奪,比如在多個任務同時讀寫一個文件,任務就是不斷的爭奪文件的讀寫控制權。其中一個任務讀寫,其他任務就不能執行相同的操作。所以我們使用鎖的概念,舉個通俗易懂的例子吧!我們的任務就是在一間房子里生產餅干,A任務搶先拿了鎖,那么A把門鎖住了,其他的都進不來,大約過了一個小時,A任務執行完畢了要去干別的事情,這個時候它不需要再這個房間繼續呆著了,A釋放了鎖,此時門被打開了,其他任務過來紛紛搶奪這個鎖,拿到鎖的任務繼續鎖著門在里面干活,哈哈,大概的意思就是這樣,現在我們通過實際的代碼來看看多進程是如何通過鎖來控制資源的爭奪的。
import multiprocessing
import sys
def worker_with(lock, f):
with lock:#使用with控制上下文,在內部代碼執行完自動釋放鎖
fs = open(f, 'a+')
n = 10
while n > 1:
fs.write("Lockd acquired via with\n")
n -= 1
fs.close()
def worker_no_with(lock, f):
lock.acquire()#顯示強調獲取鎖
try:
fs = open(f, 'a+')
n = 10
while n > 1:
fs.write("Lock acquired directly\n")
n -= 1
fs.close()
finally:
lock.release()#顯示釋放鎖,釋放資源的控制
if __name__ == "__main__":
lock = multiprocessing.Lock()
f = "file.txt"
w = multiprocessing.Process(target = worker_with, args=(lock, f))
nw = multiprocessing.Process(target = worker_no_with, args=(lock, f))
w.start()
nw.start()
print "end"
總結
以上是生活随笔為你收集整理的python multiprocessing lock_python多进程Lock锁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python可变参数的特点_可变参数**
- 下一篇: tushare pro接口_利用tush