當多執行緒同時開始執行的時候,是沒有先後順序的,誰先搶到執行權誰就先執行。
通過event物件可以控制線程優先執行權。
event=threading.event()event.wait()
#event 被設定,執行緒則阻塞不再繼續執行下去
event.set() #
event 解除設定,被阻塞的執行緒可以繼續執行下去
event.clear() #
如果 event被解除設定後,需要再次設定,則需要先 clear
例子: 控制乙個執行緒先執行, 當他先執行部分任務後進行阻塞等待,並且需要其他執行緒再先執行的時候,則需要使用event控制。
importthreading
import
time
class
boss(threading.thread):
def__init__
(self,thread_name):
threading.thread.
__init__
(self)
self.thread_name=thread_name
defrun(self):
print('
%s:大家今晚需要加班
'%self.thread_name)
event.set()
time.sleep(1)
print('
%s:大家可以下班了
'%self.thread_name)
event.set()
class
worker(threading.thread):
def__init__
(self,thread_name):
threading.thread.
__init__
(self)
self.thread_name=thread_name
defrun(self):
event.wait()
print('
%s:命苦啊
' %self.thread_name)
event.clear()
event.wait()
print('
%s:oh yeah!
' %self.thread_name)
if__name__ == '
__main__':
event=threading.event()
threads=
for i in range(5):
t=worker('
woker%s
'%i)
'boss'))
for t in
threads:
t.start()
for t in
threads:
t.join()
訊號控制量, 即同時可以設定有多少個執行緒執行任務
importthreading
import
time
class
mythread(threading.thread):
def__init__
(self,thread_name):
threading.thread.
__init__
(self)
self.thread_name=thread_name
defrun(self):
ifsemaphore.acquire():
time.sleep(1)
(self.thread_name)
semaphore.release()
if__name__ == '
__main__':
semaphore=threading.semaphore(5)
threads=
for i in range(100):
t=mythread('
thread%s
'%i)
for t in
threads:
t.start()
for t in
threads:
t.join()
Python多執行緒同步
1 實現檔案讀寫的檔案ltz schedule times.py usr bin env python coding utf 8 import os def readtimes res if os.path.exists schedule times.txt fp open schedule tim...
python 多執行緒5執行緒同步
互斥鎖是最簡單的執行緒同步機制,python提供的condition物件提供了對複雜執行緒同步問題的支援。condition被稱為條件變數,除了提供與lock類似的acquire和release方法外,還提供了wait和notify方法。執行緒首先acquire乙個條件變數,然後判斷一些條件。如果條...
Python 多執行緒3 同步執行緒
現在假設這樣乙個例子 有乙個全域性的計數num,每個執行緒獲取這個全域性的計數,根據num進行一些處理,然後將num加1。很容易寫出這樣的 encoding utf 8 import threading import time class mythread threading.thread def ...