02. 守護(hù)線程和線程之間共享全局變量

1. 守護(hù)線程

  1. 使用setDaemon(True)把所有的子線程都變成了主線程的守護(hù)線程,因此當(dāng)主進(jìn)程結(jié)束后,子線程也會(huì)隨之結(jié)束。所以當(dāng)主線程結(jié)束后,整個(gè)程序就退出了。
  2. 把子進(jìn)程設(shè)置為守護(hù)線程,必須在start()之前設(shè)置。
  3. 為了讓守護(hù)線程執(zhí)行結(jié)束之后,主線程再結(jié)束,我們可以使用join方法,讓主線程等待子線程執(zhí)行
  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)  # 把子進(jìn)程設(shè)置為守護(hù)線程,必須在start()之前設(shè)置
    t1.start()
    t1.join()  # 設(shè)置主線程等待子線程結(jié)束
    print('main thread end.')

2. 多線程共享全局變量

  1. 線程是進(jìn)程的執(zhí)行單元,進(jìn)程是系統(tǒng)分配資源的最小單位,所以在同一個(gè)進(jìn)程中的多線程是共享資源的。
#!/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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容