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("完成交工")

    这样就相对完美了

  • 相关阅读:
    POJ1521 最优哈夫曼编码树 贪心算法的有效应用
    hdu4911逆序对+mergesort
    hdu1735 字数统计 贪心算法
    最大不相交区间数+最少区间数覆盖问题 贪心思想
    洛谷1010 幂次方 分治算法+掩码的应用
    POJ 2082 三种解法(暴力+树状数组+线段树)
    POJ3134 Power Calculus IDA*搜索的一个应用
    hdu2648 STL map的简单应用
    Delphi 数据类型与Windows 数据类型 对照
    Delphi Window Messages 消息
  • 原文地址:https://www.cnblogs.com/shenZS/p/10561905.html
Copyright © 2011-2022 走看看