您好,欢迎来到爱够旅游网。
搜索
您的当前位置:首页41.python之进程锁

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务