美文网首页python并发
02. 守护线程和线程之间共享全局变量

02. 守护线程和线程之间共享全局变量

作者: 花间派I风月 | 来源:发表于2020-05-04 21:11 被阅读0次

    1. 守护线程

    1. 使用setDaemon(True)把所有的子线程都变成了主线程的守护线程,因此当主进程结束后,子线程也会随之结束。所以当主线程结束后,整个程序就退出了。
    2. 把子进程设置为守护线程,必须在start()之前设置。
    3. 为了让守护线程执行结束之后,主线程再结束,我们可以使用join方法,让主线程等待子线程执行
    4. join()在start()之后。
    #!/usr/bin/env python
    # coding:utf-8
    
    
    import threading
    import time
    
    
    def run(n):
        print(f'task {n}')
        time.sleep(1)
        print('2s')
        time.sleep(1)
        print('1s')
        time.sleep(1)
        print('0s')
        time.sleep(1)
    
    
    if __name__ == '__main__':
        t1 = threading.Thread(target=run, args=('t1',))
        t1.setDaemon(True)  # 把子进程设置为守护线程,必须在start()之前设置
        t1.start()
        t1.join()  # 设置主线程等待子线程结束
        print('main thread end.')
    

    2. 多线程共享全局变量

    1. 线程是进程的执行单元,进程是系统分配资源的最小单位,所以在同一个进程中的多线程是共享资源的。
    #!/usr/bin/env python
    # coding:utf-8
    
    import threading
    import time
    
    global_num = 100
    
    
    def work1():
        global global_num
        for i in range(3):
            global_num += 1
        print(f'in work1 global_num is :{global_num}')
    
    
    def work2():
        global global_num
        print(f'in work2 global_num is {global_num}')
    
    
    if __name__ == '__main__':
        t1 = threading.Thread(target=work1)
        t1.start()
        time.sleep(1)
        t2 = threading.Thread(target=work2)
        t2.start()
    # output:
    in work1 global_num is :103
    in work2 global_num is 103
    

    相关文章

      网友评论

        本文标题:02. 守护线程和线程之间共享全局变量

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