python主线程有两个子线程、创建两个主函数_Python多任务之线程
1.1. 線程
threading.Thread(target = 函數名)
線程的運行是沒有先后順序的
主線程死了,子線程必死。子線程結束后,子線程會給子線程收尸。
當調用Thread的時候,不會創建線程;當調用Thread創建的實例對象的start()時,才會創建線程以及讓這個線程開始運行
1.1.1. 概念
python中 import threading
線程(thread)是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發多個線程,每條線程并行執行不同的任務。線程是獨立調度和分派的基本單位。線程可以為操作系統內核調度的內核線程,如Win32線程;由用戶進程自行調度的用戶線程,如Linux平臺的POSIX Thread;或者由內核與用戶進程,如Windows 7的線程,進行混合調度。同一進程中的多條線程將共享該進程中的全部系統資源,如虛擬地址空間,文件描述符和信號處理等等。但同一進程中的多個線程有各自的調用棧(call stack),自己的寄存器環境(register context),自己的線程本地存儲(thread-local storage)。
· 子線程與子線程共享全局變量
· 更改全局變量,必須用global嗎
在一個函數中,對全局變量進行修改時,到底是否需要使用global進行說明要看是否對全局變量得執行指向進行了修改。
如果修改了指向,既讓全局變量指向一個新的地方。那么必須使用global。如果,僅僅是修改指向的空間中的數據,此時不用必須使用global
· 資源競爭
如果多線程
· 線程同步
同步就是協同步調,按預定的先后次序進行運行。
能夠保證線程安全的訪問競爭資源,最簡單的同步機制就是引入互斥鎖
· 互斥鎖
當多個線程幾乎同時修改某一個共享數據的時候,需要進行同步控制。
某個線程要更改共享數據時,先將其鎖定,此時資源的狀態為“鎖定”,其他線程不能修改;直到該線程釋放資源,將資源的狀態變成“非鎖定”,其他線程才能再次鎖定該資源,互斥鎖保證了每次只有一個線程進行寫入操作,從而保證了多線程情況下數據的正確性。
· 死鎖
在線程間共享多個資源的時候,如果兩個線程分別占有一部分的資源,就會造成死鎖
1.1.2. 創建線程
· 指定函數為線程
t1 = threading.Thread ( target = 函數名)
t1.start()
· 指定類為線程
首先創建類的時候需要繼承threading.Thread,在類里需要一個run()對象
因為繼承,所以直接使用對象調用start(),而使用start()時會調用run()
class ss(threading.Thread):
def run():
pass
s1 = ss()
s1.start()
創建一個對象,只能創建一個線程,一個線程只能執行一個函數
· 傳參數
t1 = threading,Thread(target = 函數名, args = (gl_list , ) )
傳的是元組,當參數為一個的時候,不要忘記,
1.1.3. 常用函數
threading.enumerate()
mutex = threading.Lock()
mutex.acquire()
mutex.release()
總結
以上是生活随笔為你收集整理的python主线程有两个子线程、创建两个主函数_Python多任务之线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高德地图api接口文档_在 R 语言里面
- 下一篇: vba 压缩图片_1分钟批量处理100张