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
    
  • 相关阅读:
    Android开源项目分类汇总
    android开发之Tabhost刷新
    android开发之图表
    通过易宝实现网上支付
    HTTP协议
    汽车美容管理系统质量属性
    框架选择的原因及其说明
    浅析软件架构
    《需求分析与系统设计》读书笔记3
    《需求分析与系统设计》读书笔记2
  • 原文地址:https://www.cnblogs.com/yan-peng/p/9972606.html
Copyright © 2011-2022 走看看