在python程序中,我需要2個基於線程模塊的線程。線程#1生成一些數據並將其放入緩衝區,線程#2應該處理緩衝區中的數據。使用線程模塊在python中實現線程
所以我的僞代碼是這樣的: 線程1:
Thread#1
while True:
Generate_Some_Data()
while flag==1:
pass()
Buffer_Address=Write_It_To_Buffer()
flag=1
Thread#2
while True:
while flag==0:
pass()
Process_Data(Buffer_Address)
flag=0
(我們假設訪問變量「標誌」被霧化,用合適的鎖)
我知道線程模塊不併發。實質上,這意味着除非其中一個線程在某些外部條件(例如file-io或time.sleep)上不阻塞,否則無論任務如何,兩個線程都將共享總處理時間。因此,根據我的理解,在上述配置中,大約一半的處理時間將浪費在「while flag」循環上。
所以,這裏是我的問題:
我說得對在線程模塊的我上面的期待/理解?在「標誌」循環中浪費了總處理時間的一半嗎?
(如果我是對的)反正有沒有完全擺脫「標誌」循環?我試圖找出另一個可以讓線程在lock.acquire()方法中休眠的結構,但是,我找不到這樣做的安全方法。 (當一個線程relases鎖,沒有quarantee其他線程將收購其同一個線程之前再次獲取它)
我也有一個跟進的問題。 python Queue是一個信號量概念的實現,它假定消費者線程是相同的。假設我有2個消費者線程,它們應該根據數據類型來處理隊列中的數據。例如,讓我們假設如果數據的類型爲「int」,則消費者1必須處理它。如果它是「浮動」,則消費者2必須處理它。但是,如果它是「字符串」,那麼消費者1和2都不應該處理數據。是否有任何編程範例對於實現這樣的問題有用? – tantuni 2012-03-07 18:54:18
@ user460153我只是爲每個消費者製作一個單獨的隊列。 – Taymon 2012-03-07 20:05:15
我認爲「條件變量」是這個問題的一個更好的範例。所有消費者線程都等待主線程發出信號。在主線程發出信號後,每個消費者線程檢查數據類型並決定是處理數據還是繼續休眠。 – tantuni 2012-03-08 18:52:40