• 【Rollo的Python之路】Python 线程学习笔记(二)


    1.0  面向对象的方法来创建线程:

    import threading
    import time
    
    #面向对象很重要,面向对象很重要,面向对象很重要
    
    
    class Mythread(threading.Thread):
    
        def __init__(self,num):
            threading.Thread.__init__(self)
            self.num = num  #self.num是个实例变量,存在t1/t2的对象里面
    
        #run是threading的内置方法
        def run(self):
            print("running on number:%s" % self.num)
            time.sleep(3)
    
    if __name__ == '__main__':
        t1 = Mythread(1)  #实例化一个对像
        t2 = Mythread(2)  #实例化一个对像
    
        t1.start()
        t2.start()

    2.0 Python线程同步锁:

    同步锁:通常被用来实现共享资源的同步访问,为每一个共享资源创建一个Lock对象当你需要访问该资源时,调用qcuqire方法来获取锁对象(如果其他线程已经获得该锁,则当前线程需等待期被释放),待资源访问完后,在调用release方法释放锁

    2.0.1 情况一:

    import threading
    import time
    
    
    def addNum():
        global num
        num -= 1 #不够时间CPU切换线程,所以线程之间不乱
    
    num = 100
    
    thread_list = []
    for i in range(100):
        t = threading.Thread(target=addNum)
        t.start()
        thread_list.append(t)
    
    for t in thread_list:
        t.join() #等待所有线程执行完毕
    
    print("finally num:", num)

    2.0.2 情况二:num同一时间被拿走了两次或多次

    import threading
    import time
    
    
    def addNum():
        global num
        temp = num
        print('ok')
        num = temp - 1
    
    num = 100
    
    thread_list = []
    for i in range(100):
        t = threading.Thread(target=addNum)
        t.start()
        thread_list.append(t)
    
    for t in thread_list:
        t.join() #等待所有线程执行完毕
    
    print("finally num:", num)
    finally num: 1

    同步锁

    lock = threading.Lock()

    lock.acquire() #开启锁

    lock.release() #释放锁

    import threading
    import time
    
    
    def addNum():
        global num
    
        lock.acquire()
        temp = num
        print('ok')
        num = temp - 1
        lock.release()
    
    num = 100
    
    thread_list = []
    lock = threading.Lock()
    for i in range(100):
        t = threading.Thread(target=addNum)
        t.start()
        thread_list.append(t)
    
    for t in thread_list:
        t.join() #等待所有线程执行完毕
    
    print("finally num:", num)
  • 相关阅读:
    汇编指令
    汇编指令
    汇编指令
    字在寄存器中的存储
    汇编指令
    字在寄存器中的存储
    汇编指令
    8086CPU的8位寄存器数据存储情况
    [转载]使用嵌入式 Tomcat 简化程序调试
    [转载]Java语法总结
  • 原文地址:https://www.cnblogs.com/rollost/p/10920342.html
Copyright © 2020-2023  润新知