Python多執行緒的threading Event

2021-09-07 01:31:46 字數 1722 閱讀 7140

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中,要保證資料的正確性,並且自己對資料進行控制,對資料進行加鎖並且自己釋放鎖。多執行緒的主要目的為了提高效能與速度,用在無關的方向是最好的,例如在使用爬蟲的時候,可以使用多執行緒來進行爬取資料,因為在這些執行緒之間沒有需要共同操作的資料,從而在這個時候利用是最好的。如果需...