多线程编程之线程守护、变量共享

376 阅读1分钟

1.线程守护

守护线程是当程序执行完毕后,无论线程是否执行完毕都会强制退出线程,一般将不重要的线程设置为守护线程。

实例代码如下:

import threading
import time
​
​
def run(n):
    time.sleep(3)
    print('task', n)
​
​
def main():
    t1 = threading.Thread(target=run, args=('t1',))
    t1.setDaemon(True)
    t1.start()
    print('end')
​
​
if __name__ == '__main__':
    main()

result:

D:\software\python\python.exe D:/python_record/thread_api_demo.py
end
​
Process finished with exit code 0

这里是因为t1线程为守护线程,当主线程已经输出end而t1线程尚未完成,只能被迫强制结束。所以最后的输出结果中看不到预期的task,t1

2.多线程共享全局变量

多线程共享全局变量是使用global在线程执行的函数中定义全局变量,从而使得线程能够从程序中读取和修改全局变量的值,达到线程之间共享全局变量的目的。

import threading
​
g_num = 100
​
​
def work1():
    global g_num
    for _ in range(3):
        g_num += 1
    print('in work1 g_num is: %d' % g_num)
​
def work2():
    global g_num
    for _ in range(3):
        g_num -= 3
    print('in work2 g_num is: %d' % g_num)
​
​
def main():
    t1 = threading.Thread(target=work1)
    t2 = threading.Thread(target=work2)
    t1.start()
    t2.start()
​
​
if __name__ == '__main__':
    main()

result:

in work1 g_num is: 103
in work2 g_num is: 94