zoukankan      html  css  js  c++  java
  • 【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)
  • 相关阅读:
    实例!使用Idea创建SSM框架的Maven项目
    springboot开发中的领域模型pojo
    JDK源码阅读:Object类阅读笔记
    DevSecOps: JIRA、Confluence工具、JIRA插件-Xray、eazybi、FishEye、Crucible、jenkins
    MySQL监控及优化
    二叉树 红黑树 B树 B+树 理解
    mysql高性能分页语句_如何优化Mysql千万级快速分页
    使用.Net MinIO SDK 踩的坑
    Windows下Minio介绍、安装及使用、密码修改
    使用docker mediawiki,搭建网页wiki
  • 原文地址:https://www.cnblogs.com/rollost/p/10920342.html
Copyright © 2011-2022 走看看