• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

python多进程Lock锁

Python admin 4周前 (04-22) 89次浏览 0个评论 扫描二维码

无论是使用多线程或者多进程都会涉及资源的争夺,比如在多个任务同时读写一个文件,任务就是不断的争夺文件的读写控制权。其中一个任务读写,其他任务就不能执行相同的操作。所以我们使用锁的概念,举个通俗易懂的例子吧!我们的任务就是在一间房子里生产饼干,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"

Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明python 多进程 Lock 锁
喜欢 (0)
admin
关于作者:

您必须 登录 才能发表评论!