學習python執行緒:
python3 執行緒中常用的兩個模組為:
_thread
threading(推薦使用)
thread 模組已被廢棄。使用者可以使用 threading 模組代替。所以,在 python3 中不能再使用」thread」 模組。為了相容性,python3 將 thread 重新命名為 「_thread」。
python中使用執行緒有兩種方式:函式或者用類來包裝執行緒物件。
函式式:呼叫 _thread 模組中的start_new_thread()函式來產生新執行緒。語法如下:
import threading
import time
defsometing
():for i in range(1,11):
print(i)
time.sleep(1)
threading._start_new_thread(someting(),())
print("main")
類方式:
class
mythread
(threading.thread):
def__init__
(self):
threading.thread.__init__(self)
print("mythread")
defrun(self):
for i in range(1,11):
print(i)
time.sleep(1)
defstart
(self):
print("開始mythread")
super().start()
t=mythread()
t2 = mythread()
t.start()
t2.start()
如果重寫了start一定要呼叫父類的start,run會在start之後自動呼叫。join執行緒阻塞方法,哪個執行緒呼叫那個執行緒阻塞.
執行緒鎖:
當多個執行緒同時進行任務時,為了保證不會有多個執行緒同時對同乙個資料進行操作造成不可預料的後果,所以有了執行緒鎖。
生成乙個鎖:
lock = threading.lock()
cond = threading.condition(lock=lock)
鎖當然有上鎖和未上鎖兩種狀態,當乙個執行緒要訪問資料時,必須要先獲得鎖,如果已經有別的執行緒獲得鎖,那麼就進入等待狀態,等別的執行緒把鎖釋放後,再進行操作。
下面是乙個簡單的執行緒鎖**:
import threading
import time
import random
class
thread1
(threading.thread):
defrun
(self):
for i in range(1,11):
if i==3: #當thread1執行到3的時候進入
cond.acquire() #鎖
cond.wait() #等待thread2執行完成
cond.release()
print(i)
time.sleep(1)
class
thread2
(threading.thread):
defrun
(self):
for i in range(30,19,-1):
print(i)
time.sleep(1)
cond.acquire()
cond.notify() #喚醒
cond.release()
lock = threading.lock()
cond = threading.condition(lock=lock)
t1 = thread1()
t2 = thread2()
t1.start()
t2.start()
然後是乙個小demo,有4個和尚,乙個做飯的三個吃飯的。
也就是經典的生產者和消費者,用到執行緒鎖技術:
import threading
import time
import random
class
huofu
(threading.thread):
def__init__
(self,name=none):
threading.thread.__init__(self)
self.name = name
defrun(self):
while
true:
cond.acquire()
if len(guo)==0:
for i in range(1,11):
print('做出第個饅頭'.format(i))
time.sleep(1)
cond.notify_all()
cond.release()
cond2.acquire()
cond2.wait()
cond2.release()
class
chihuo
(threading.thread):
def__init__
(self,name=none):
threading.thread.__init__(self)
self.name = name
defrun(self):
while
true:
mantou=none
cond.acquire()
if len(guo)==0:
cond2.acquire()
cond2.notify()
cond2.release()
cond.wait()
else:
mantou=guo.pop()
cond.release()
if mantou is
notnone:
print('正在吃'.format(self.name,mantou))
time.sleep(random.randint(1,5))
guo =
lock = threading.lock()
cond = threading.condition(lock=lock)#吃的鎖
lock2 = threading.lock()
cond2 = threading.condition(lock=lock2)#蒸饅頭的鎖
huofu(name='做飯和尚').start()
chihuo(name='長眉和尚吃飯').start()
chihuo(name='短眉和尚吃飯').start()
chihuo(name='中眉和尚吃飯').start()
python3 多執行緒
多執行緒簡介 執行緒 thread 也稱輕量級程序,時作業系統能夠進行運算排程的最小單位,它被包涵在程序之中,時程序中的實際運作單位。執行緒自身不擁有資源,只擁有一些在執行中必不可少的資源,但他可與同屬乙個程序的其他執行緒共享程序所擁有的全部資源。乙個執行緒可以建立和撤銷另乙個執行緒,同一程序中的多...
python3 多執行緒,執行緒鎖
python使用多執行緒,不一定執行速度快,這裡引入gil global interpreter lock python直譯器中任意時刻都只有乙個執行緒在執行 gil執行過程 1 設定乙個gil 2 切換執行緒去準備執行任務 runnale就緒狀態 3 執行 4 可能出現的狀態 執行緒任務執行結束 ...
Python3多執行緒程式設計
多執行緒使用,可以讓乙個執行緒訪問某個資源,其他執行緒給他通過queue發任務,這樣避免對共享的資源編寫繁瑣的加鎖解鎖 threading包也提供了 locks,events,condition variables,and semaphores這些工具,可以做多執行緒間的資源共享.python有乙個...