線程

線程

一、線程模塊

在這裏插入圖片描述

二、Thread(類)

在這裏插入圖片描述

三、join & setDaemon

在這裏插入圖片描述
join
在這裏插入圖片描述
setDaemon
在這裏插入圖片描述

四、創建線程

方法1:實例Thread類

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author:DM time:2019/8/2 20:49
from threading import Thread
import time


def f1(people):
    print("hello,{}".format(people))
    time.sleep(3)
    print("bye")


def f2():
    print("hi")
    time.sleep(3)
    print("goodbye")


if __name__ == '__main__':
    # 1.正常調用,是有先後順序,主線程
    f1()
    f2()
    # 2.線程操作
    f1_thread = Thread(target=f1, args=("胡歌",), name='hello')  # 創建了一個線程實例
    f2_thread = Thread(target=f2, name='hi')   # 實例對象時,函數並未執行
    # 設置線程名稱
    f1_thread.setName("dai")
    f1_thread.setName("hu")

    print("f1 name:", f1_thread.getName())
    print("f2 name:", f2_thread.getName())
    # 守護線程
    # f1_thread.setDaemon(True)  # 在主線程執行完畢後,強行結束子線程,程序結束
    # f2_thread.setDaemon(True)
    # 運行線程
    f1_thread.start()   # 調用start方法纔開始執行
    f2_thread.start()
    # 阻塞調用
    f1_thread.join()  # 阻塞調用,主線程進行等待
    f2_thread.join() 
	 # 若不調用阻塞,在主線程執行完畢後並不會立即結束程序,而是等子程序執行完畢後,才結束程序
    print("主線程執行完畢")

"""
主線程執行完畢了,但是子線程依然沒有關閉(或陷入死循環),程序則一直無法關閉,於是出現了守護線程
守護線程:主線程執行完畢後,程序就關閉
"""

方法2:繼承並重寫Thread類

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author:DM time:2019/8/2 21:15
from threading import Thread
import time

# 1.方式一(不太適用,因爲不能接收參數)
class MyThread(Thread):
    def run(self):
        print('hello')
        time.sleep(3)
        print('bye')


my_thread = MyThread()  # 創建一個線程實例
my_thread.start()

# 重寫了類中run方法,通過start方法自動去調用類中的run方法
# 2.方式二
class MyThread(Thread):
    def __init__(self, people, *args, **kwargs):
        super().__init__(*args, **kwargs)  # 繼承父類構造方法
        self.people = people
    # 爲了展示效果而重寫的run方法(可忽略)
    def run(self):
        print('hello,{}'.format(self.people))
        time.sleep(3)
        print('bye')


my_thread = MyThread("齊時久", name="hello")  # 創建一個線程實例
print(my_thread.getName())
my_thread.start()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章