zoukankan      html  css  js  c++  java
  • python3之线程

    1线程的创建:

    import threading
    import time,random
    
    
    def text1():
        while True:
            print(1111111)
            time.sleep(random.random()*2)
    
    def text2():
        while True:
            print(2222222)
            time.sleep(random.random() * 2)
    def main():
        # text1()
        # text2()
    
        #创建多线程
        t1 = threading.Thread(target=text1)
        t2 = threading.Thread(target=text2)
        t1.start()  #执行多线程
        t2.start()
    
    if __name__ == "__main__":
        main()
    

     2互斥锁:

    在多线程之中全局变量是共享的;在执行过程中又可能会发生资源竞争,所以会用到互斥锁:比如

    import threading
    import time,os,random
    
    num = 0
    def text1(agr):
        global num
        for i in range(agr):
            num += 1
        print(num)
    
    def text2(agr):
        global num
        for i in range(agr):
            num += 1
        print(num)
    
    
    def main():
    
        t1 = threading.Thread(target=text1,args=(1000000,))
        t2 = threading.Thread(target=text2,args=(1000000,))
        t1.start()
        t2.start()
    
        time.sleep(5)
        print(num)
    
    if __name__ == "__main__":
        main()
    

     执行结果:如下,而不是我们向看到的2000000

    1170362
    1302259
    1302259
    

     如何解决呢,用到互斥锁:

    import threading
    import time,os,random
    
    num = 0
    def text1(agr,mutex):
        global num
        for i in range(agr):
            mutex.acquire()  #上锁
            num += 1
            mutex.release()  #解锁
        print(num)
    
    def text2(agr,mutex):
        global num
        for i in range(agr):
            mutex.acquire()  #上锁
            num += 1
            mutex.release() #解锁
    
        print(num)
    
    
    def main():
        mutex = threading.Lock()  #创建一个互斥锁
        t1 = threading.Thread(target=text1,args=(1000000,mutex))
        t2 = threading.Thread(target=text2,args=(1000000,mutex))
        t1.start()
        t2.start()
    
        time.sleep(5)
        print(num)
    
    if __name__ == "__main__":
        main()
    

     结果:

    1846157
    2000000
    2000000
    
  • 相关阅读:
    php反射
    html video api控件总结
    linux CentOS7.2安装ffmpeg-3.0.2
    2019年7月12日星期五(C语言)
    2019年7月11日星期四(C语言)
    2019年7月10日星期三(C语言)
    2019年7月9日星期二(C语言)
    2019年7月8日星期一(C语言)
    2019年7月5日星期五(C语言)
    2019年7月4日星期四(C语言及LINUX命令)
  • 原文地址:https://www.cnblogs.com/yan-peng/p/9972606.html
Copyright © 2011-2022 走看看