python threading模組提供event物件用於執行緒間通訊。它提供了一組、拆除、等待用於執行緒間通訊的其他方法。
event它是溝通中最簡單的乙個過程之中,乙個執行緒產生乙個訊號,號。python 通過threading.event()產生乙個event物件。event物件維護乙個內部標誌(標誌初始值為false),通過set()將其置為true。wait(timeout)則用於堵塞執行緒直至flag被set(或者超時,可選的),isset()用於查詢標誌位是否為true,clear()則用於清除標誌位(使之為false)。
設定\清除訊號
event的set()方法可設定event物件內部的訊號標誌為真,event物件提供了isset()方法來推斷其內部訊號標誌的狀態,使用set()方法後,isset()方法返回true。clear()方法可清除event物件內部的訊號標誌(設為false)。使用clear方法後。isset()方法返回false
等待當event物件的內部訊號標誌為false時。wait方法一直堵塞執行緒等待到其為真或者超時(若提供,浮點數,單位為秒)才返回,若event物件內部標誌為true則wait()方法馬上返回。
舉例:下述是一段模擬「client監聽並處理硬體port訊息」的程式片段:硬體port訊息傳送時機是隨機的(通過random實現),read執行緒負責讀訊息並通知parse執行緒去處理。
import threading
import time
import random
l =
def read():
count =2
while 1:
count = random.randint(0,1)
if count:
if l:
evt.set()
print 'new rcvd sent to \'parse thread\'\n'
time.sleep(2)
print 'never here\n'
def parse():
while 1:
if evt.isset():
evt.clear()
print repr(len(l)) +' messages to parse:\n'
while l:
print l.pop(0)
print 'all msg prased,sleep 2s\n'
time.sleep(2)
else:
print 'no message rcved\n'
time.sleep(2)
print 'quit parse\n'
if __name__ == '__main__':
evt = threading.event()
r = threading .thread(target = read)
p = threading .thread(target = parse)
r.start()
p.start()
time.sleep(2)
r.join()
p.join()
#time.sleep(2)
print 'end'
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...
python多執行緒 Python多執行緒的一些知識
了更好地體驗多執行緒爬蟲,本章先介紹下需要了解的知識點,以便後續的多執行緒爬蟲文章有更好的理解與學習。在接下來要講的知識點中,感興趣的讀者們請先弄清楚程序和執行緒兩者是什麼?它們各自有著什麼樣的關係呢?讀下廖雪峰老師簡單介紹的例子,比喻非常生動清晰,故這裡不多做講解。程序和執行緒 www.liaox...
python多執行緒鎖 python的多執行緒程式設計之鎖
1 背景概述 在python中,要保證資料的正確性,並且自己對資料進行控制,對資料進行加鎖並且自己釋放鎖。多執行緒的主要目的為了提高效能與速度,用在無關的方向是最好的,例如在使用爬蟲的時候,可以使用多執行緒來進行爬取資料,因為在這些執行緒之間沒有需要共同操作的資料,從而在這個時候利用是最好的。如果需...