1. 程式人生 > 實用技巧 >python多工以及Thread使用

python多工以及Thread使用

多工——作業系統可以同時執行多個任務

import threading
import time
def test():
    print("這是多執行緒1")
    time.sleep(1)
def test2():
    print("這是多執行緒2")
    time.sleep(1)
if __name__ == "__main__":
    for i in range(5):
        t1=threading.Thread(target=test)
        t2 = threading.Thread(target=test2)
        t1.start()
        t2.start()

執行結果如下:

這是多執行緒1
這是多執行緒2
這是多執行緒1
這是多執行緒2
這是多執行緒1
這是多執行緒2
這是多執行緒1
這是多執行緒2
這是多執行緒1
這是多執行緒2

執行緒介紹

執行緒可以理解成程式中的一個可以執行的分支, 它是cup排程的基本單元。python的thread模組是比較底層的模組,python的threading模組是對thread做了一些包裝的,可以更加方便的使用 我們可採用執行緒完成唱歌跳舞一起進行,如下
import threading
from time import sleep
 
def sing():
    for i in range(3):
        
print("正在唱歌...%d"%i) sleep(1) def dance(): for i in range(3): print("正在跳舞...%d"%i) sleep(1) if __name__ == '__main__': # 建立執行緒1 # "target" : 執行緒執行的目標函式 my_thread1 = threading.Thread(target=sing) my_thread2 = threading.Thread(target=dance) # 開啟執行緒執行任務
my_thread1.start() my_thread2.start()

執行緒執行時沒有先後順序的,主執行緒要等所有子執行緒執行完才結束
threading模組中的enumerate( )方法可以檢視當前執行起來的執行緒的列表

len(threading.enumerate()) 當呼叫Thread的時候不會建立執行緒,當呼叫start()方法時才建立執行緒以及讓這個執行緒開始執行 二、繼承Thread類完成建立執行緒
import threading
# 自定義執行緒
class MyThread(threading.Thread):
 
    def __init__(self, num):
        # 注意: 需要呼叫父類的構造方法
        super(MyThread, self).__init__()
        self.num = num
 
    # 任務1
    def work1(self):
        for i in range(self.num):
            print("我是在自定義執行緒裡面執行的", self.name)
 
 
    # 重寫run方法
    def run(self):
        self.work1()
 
# 建立執行緒
mythread = MyThread(5)
mythread.start()  #start()自動調run方法

執行結果如下:

我是在自定義執行緒裡面執行的 Thread-1
我是在自定義執行緒裡面執行的 Thread-1
我是在自定義執行緒裡面執行的 Thread-1
我是在自定義執行緒裡面執行的 Thread-1
我是在自定義執行緒裡面執行的 Thread-1

同步概念

同步就是協同步調,按預定的先後次序進行執行,同步是使用互斥鎖完成的。

互斥鎖 當多個執行緒幾乎同時修改某一個共享資料時,需要進行同步控制。 互斥鎖為資源引入一個狀態:鎖定/非鎖定。某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態是鎖定,其他執行緒不能更改。 threading中lock()函式
#建立鎖
mutex=threading.Lock()
#鎖定
mutex.acquire()
#釋放
mutex.release()