python多工以及Thread使用
阿新 • • 發佈:2020-09-08
多工——作業系統可以同時執行多個任務
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( )方法可以檢視當前執行起來的執行緒的列表
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()