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

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. 守护线程和线程之间共享全局变量)