41.python之进程锁

进程锁

多个进程之间虽然是独立的,但仅限于内存和运算,如果涉及到其它一些资源,就可能存在竞争问题,当多个进程使用同一份数据资源的时候,就会引发数据安全或顺序混乱问题,添加进程锁则可以解决此类问题。
进程锁,在同一时间执行一个进程
要注意,锁不能滥用,若是因为某些原因没有解锁,就会造成死锁的现象,这样后面的进程也就无法执行。

进程锁的创建:模块multiprocessing的Manager类

from multiprocessing import Manager

manager = Manager()
lock = manage.Lock

进程锁的加锁和解锁

例1:不加锁

import os
import time
from multiprocessing import Pool

def test(count):
    print(f'count={count},进程号:{os.getpid()}')
    time.sleep(1)

if __name__ == '__main__':
    start_time = time.time()
    # 创建一个进程池,里面有3个进程
    p = Pool(3)
    for i in range(9):
        p.apply_async(func=test, args=(i,))

    p.close()
    p.join()
    print(f'间隔时间:{time.time() - start_time}')

结果:
在这里插入图片描述

例2:加锁

import os
import time
from multiprocessing import Pool
from multiprocessing import Manager

def test(count, lock):
    # 加锁
    lock.acquire()
    print(f'count={count},进程号:{os.getpid()}')
    time.sleep(1)
    # 解锁
    lock.release()
    return '返回值:count=%s,进程号=%s' % (count, os.getpid())

if __name__ == '__main__':
    # 创建锁
    manage = Manager()
    lock = manage.Lock()

    start_time = time.time()
    # 创建一个进程池,里面有3个进程
    p = Pool(3)
    for i in range(9):
        p.apply_async(func=test, args=(i, lock))

    p.close()
    p.join()
    print(f'间隔时间:{time.time() - start_time}')

结果:

  • 之前未加锁时,是3个线程在相同时间并行执行,9个任务大概花了3s
  • 加上锁后,时间间隔是9s,同一时间只有一个进程在执行,9个任务大概花了9s
  • 在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值