Python_多进程_进程安全(加锁)&进程同步信号传递(Event)

一、多进程_进程安全(加锁)

1、目的

锁是为了确保数据的一致性,避免读写时,其他数据同时读取,会造成数据错误

线程安全:多线程读写的时候会加锁

线程不安全:没加锁,写起来会乱

2、加锁

#encoding=utf-8
from multiprocessing import Process, Lock  
import time
def l(num,lock):  
  lock.acquire() # 获得锁
  time.sleep(0.2)
  print("Hello Num: %s" % (num))  
  lock.release() # 释放锁

if __name__ == '__main__':  
    lock = Lock()  # 创建一个共享锁实例
    for num in range(50):  
      Process(target = l, args = (num,lock)).start()

3、没加锁

#encoding=utf-8

from multiprocessing import Process, Lock  

import time

def l(num):  

  #lock.acquire() # 获得锁

  time.sleep(0.2)

  print("Hello Num: %s" % (num))  

  #lock.release() # 释放锁

 

if __name__ == '__main__':  

    #lock = Lock()  # 创建一个共享锁实例

    for num in range(50):  

      Process(target = l, args = (num,)).start()

4、加上N把锁

#encoding=utf-8
import multiprocessing
import time
def worker(s, i):
  s.acquire()
  print(multiprocessing.current_process().name + " acquire")
  time.sleep(i)
  print(multiprocessing.current_process().name + " release")
  s.release()

if __name__ == "__main__":
  # 设置限制最多3个进程同时访问共享资源
  s = multiprocessing.Semaphore(3)
  for i in range(5):
    p = multiprocessing.Process(target = worker, args = (s, i * 2))
    p.start()

 

转载于:https://www.cnblogs.com/rychh/articles/11374579.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值