zoukankan      html  css  js  c++  java
  • threading 多线程操作

    import threading,  time
    # 导入两个模块 threading time
    #定义两个程序
    def A():
        time.sleep(1)
        print("我是A程序")
    def B():
        time.sleep(2)
        print("我是B程序")
    
    if __name__ == "__main__":
        thread_A = threading.Thread(target=A)
        thread_B = threading.Thread(target=B)
        thread_A.start()
        thread_B.start()
        print("完成交工")

    会出现的问题是,打印结果是

    完成交工
    我是A程序
    我是B程序
    

     不是我们想要的结果,这是要用到join,完成后的代码是

    import threading,time
    def A():
        time.sleep(1)
        print("我是A程序")
    def B():
        time.sleep(2)
        print("我是B程序")
    
    if __name__ == "__main__":
        thread_A = threading.Thread(target=A)
        thread_B = threading.Thread(target=B)
        thread_A.start()
        thread_B.start()
        thread_A.join()
        thread_B.join()
    
        print("完成交工")

    打印结果是 

    我是A程序
    我是B程序
    完成交工

    如果的代码有延迟,就又会产生问题,比如A程序睡眠时间长,导致B程序先执行。多线程是不规律执行的。比如

    import threading,time
    def A():
        time.sleep(5)
        print("我是A程序")
    def B():
        time.sleep(2)
        print("我是B程序")
    
    if __name__ == "__main__":
        thread_A = threading.Thread(target=A)
        thread_B = threading.Thread(target=B)
        thread_A.start()
        thread_B.start()
        thread_A.join()
        thread_B.join()
    
        print("完成交工")

    这样就会出现先执行完B,所以就可以用lock锁来限制

    import threading,time
    def A():
        lock.acquire()#获取
        time.sleep(5)
        print("我是A程序")
        lock.release()#释放
    def B():
        lock.acquire()#获取
        time.sleep(2)
        print("我是B程序")
        lock.release()#释放
    if __name__ == "__main__":
        lock = threading.Lock()#定义全局变量
        thread_A = threading.Thread(target=A)
        thread_B = threading.Thread(target=B)
        thread_A.start()
        thread_B.start()
        thread_A.join()
        thread_B.join()
    
        print("完成交工")

    这样就相对完美了

  • 相关阅读:
    childNodes.length和form.length的不同
    外部样式表声明的样式并不会进入style对象
    js之insertBefore(newElement,oldElement)
    文字不换行,超出部分显示成省略号
    animation和transition做动画的区别
    html中隐藏一个元素的方法
    css常见属性和属性值
    css选择器的优先级
    frameset怎么框架内部跳转
    form表单标签及属性的介绍
  • 原文地址:https://www.cnblogs.com/shenZS/p/10561905.html
Copyright © 2011-2022 走看看