• python互斥锁


    • 互斥锁Mutex的使用
    多个线程处理共享数据,数据会出现问题:
      2.7之前每100指令切换一次GIL锁,线程就会sleep,线程会把前100条处理指令存放在CPU缓存内,切换GIL锁后放入另外一个线程再次处理同一条共享数据,如果我这条共享数据需要101条指令才能处理完,那么这块数据结果就会出现问题,当所有执行线程轮一边后在回来,CPU会取出第一次缓存区的数据,执行第一条数据的101条指令,结果会覆盖掉共享数据,所以的出的结果并不是我们想得到的。
     
    决上述问题,我们就要使用“互斥锁”:
      互斥锁:保证锁定同一个线程,修改这个完整的数据,是用户程序自己的锁。
      使用情况:因为使用时暂用时间,影响其他线程等待,所以尽量修改处理块的数据后立即释放锁。
     
    互斥锁模拟
    复制代码
    import threading,time
    def run(n):
        # 获取一把锁
        lock.acquire()
     
    # 设置全局变量
        global num
        num += 1
    
        # 释放一把锁
        lock.release()
    
    # 互斥锁实例化
    lock = threading.Lock()
    num = 0
    
    # 循环50次
    for i in range(50):
    
        # 生成一个线程实例target=目标,args=参数
        t = threading.Thread(target=run,args=("t-%s"%i,))
    
    # 启动线程 调用run
    t.start()
    
    # 执行结果添加到列表
    t_objs.append(t)
    
    print("num",num)
  • 相关阅读:
    MySQL主键和外键使用及说明
    SQLAlchemy
    路飞学城购买流程API
    路飞学城知识点
    使用rest_framework写api接口的一些注意事项(axios发送ajax请求)
    微信推送功能
    支付宝支付业务
    路飞学城前端Vue
    Python爬虫,用第三方库解决下载网页中文本的问题
    Python爬虫,抓取淘宝商品评论内容
  • 原文地址:https://www.cnblogs.com/pyxuexi/p/13942571.html
Copyright © 2020-2023  润新知