我想找到一種機制來輕鬆報告Python線程的進度。例如,如果我的線程有一個計數器,我想知道計數器的價值,但重要的是,我只需要知道最新的價值,而不是每一個過去的價值。Python線程的易於刷新隊列
我認爲最簡單的解決方案是一個單一的值Queue,其中每當我在線索中新建一個值時,它就會用新值替換舊值。然後當我在主程序中做一個get
時,它只會返回最新值。
因爲我不知道如何做到上述,而是我所做的是每個計數器值put
排隊,當我get
,我得到的所有值,直到沒有更多的,只是保持最後。但是,這看起來很不理想,因爲我正在填充我不在乎的數千個價值的隊列。
這裏是什麼,我現在做的一個例子:
from threading import Thread
from Queue import Queue, Empty
from time import sleep
N = 1000
def fast(q):
count = 0
while count<N:
sleep(.02)
count += 1
q.put(count)
def slow(q):
while 1:
sleep(5) # sleep for a long time
# read last item in queue
val = None
while 1: # read all elements of queue, only saving last
try:
val = q.get(block=False)
except Empty:
break
print val # the last element read from the queue
if val==N:
break
if __name__=="__main__":
q = Queue()
fast_thread = Thread(target=fast, args=(q,))
fast_thread.start()
slow(q)
fast_thread.join()
我的問題是,有沒有更好的方法嗎?
IM不太清楚你爲什麼不直接使用共享變量?只要只有一個線程寫入和所有其他讀取,就不會有問題。 – 2014-10-03 20:55:39
你能用'maxsize = 1'來做一個'Queue'嗎? – 2014-10-03 20:56:16
我在@DonQuestion這裏。爲什麼不直接在'slow'內訪問'count'? – dano 2014-10-03 20:57:41