zoukankan      html  css  js  c++  java
  • Python多线程-线程锁

    多线程修改一份数据时需要用到线程锁,以防止数据修改出错

    #-*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    import threading
    import time
    
    num = 0
    t_obj = []
    lock = threading.Lock() #声明一个锁并赋给一个变量
    
    def MyThread(n):
        lock.acquire() #给线程加锁
        global num
        time.sleep(0.5)
        num +=1
        lock.release() #释放给线程锁
    
    for i in range(20):
        t = threading.Thread(target=MyThread,args=(i,))
        t.start()
        t_obj.append(t)
    
    for t in t_obj:
        t.join()
    
    print("num:",num)
    

     递归锁

    递归锁就是锁中有锁,一把锁套着一把锁

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    import threading
    
    num = 0
    num2 = 0
    lock = threading.RLock() #声明一个递归锁
    
    def Lock_1():
        print("---This is Lock_1---")
        lock.acquire()
        global num
        num += 1
        lock.release()
        return num
    
    def Lock_2():
        print("---This is Lock_2---")
        lock.acquire()
        global num2
        num2 += 1
        lock.release()
        return num2
    
    def Lock_3():
        lock.acquire()
        print("---This is Lock_3---")
        Run_Lock_1 = Lock_1()
        print("---Between Lock_1 and Lock_2---")
        Run_Lock_2 = Lock_2()
        lock.release()
        print(Run_Lock_1,Run_Lock_2)
    
    for i in range(10):
        t = threading.Thread(target=Lock_3)
        t.start()
    
    while threading.active_count() != 1:
        print(threading.active_count())
    else:
        print("---All Thread Have Done---")
        print(num,num2)
    
  • 相关阅读:
    第三章 熟悉常用的HDFS操作
    爬虫大作业
    数据结构化与保存
    使用正则表达式,取得点击次数,函数抽离
    爬取校园新闻首页的新闻
    网络爬虫基础练习
    综合练习,词频统计
    Hadoop综合大作业
    理解MapReduce
    熟悉常用的HBase操作
  • 原文地址:https://www.cnblogs.com/sch01ar/p/8058871.html
Copyright © 2011-2022 走看看