线程

作者: 北游_ | 来源:发表于2018-06-14 20:27 被阅读7次

    语法

    多线程工作在单进程下。在多线程模式下,数据变量是被所有线程共享的。

    1.创建线程

    import threading
    
    def runFunc1(a):
        for i in range(10):
            print('func1' ,int(a) + i)
    
    
    def runFunc2(b):
        for i in range(4):
            print('func2',int(b) + i)
    
    
    if __name__ == '__main__':
        # 创建线程1
        t1 = threading.Thread(target=runFunc1, args=(2,))
        # 创建线程2
        t2 = threading.Thread(target=runFunc2, args=(4,))
        
        # 开启线程1
        t1.start()
        # 开启线程2
        t2.start()
        
        # 阻塞主线程
        t1.join()
        t2.join()
        
        
    # 控制台输出:
    """
    func1 2
    func1 3
    func1 4
    func1 5
    func2 4
    func1 6
    func2 5
    func1 7
    func2 6
    func1 8
    func2 7
    func1 9
    func1 10
    func1 11
    """       
    

    当两个处理函数同时操作一个变量时,要使用线程锁。

    • 获取锁:lock.acquire()
    • 释放锁:lock.release()
    • 使用 try……finally ,在finally中处理释放锁

    线程锁的好处

    • 确保了某段关键代码只能由一个线程从头到尾完整地执行,

    线程锁的坏处

    • 首先是阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程模式执行,效率就大大地下降了。
    • 由于可以存在多个锁,不同的线程持有不同的锁,并试图获取对方持有的锁时,可能会造成死锁,导致多个线程全部挂起,既不能执行,也无法结束,只能靠操作系统强制终止。

    相关文章

      网友评论

          本文标题:线程

          本文链接:https://www.haomeiwen.com/subject/lgrueftx.html