2013-05-01 35 views
1

有沒有辦法讓StringIO.readlines()阻塞,直到流關閉或通過write()使新數據可用?阻止版本StringIO.readlines()

我正在寫一個接口,希望像對象一樣阻塞文件,並且在將數據寫入到StringIO實例之前立即返回。使用initial_value參數也不是一個選項,因爲我需要使用中間結果。

另外還有任何其他(文本)文件就像在Python中的FIFO /流?

+1

誰寫入流?其他線程?如果是這樣,你可以使用[隊列](http://docs.python.org/2/library/queue.html)。 – 2013-05-01 13:54:58

+0

我在一個線程中寫入流,數據在另一個線程中讀取。我不能使用隊列,因爲接口期望獲得像對象一樣的文件。 – Perseids 2013-05-01 15:06:26

回答

0

如果您使用threads那麼您應該使用Queue。如果您使用其他結構進行線程間通信,它將爲您節省一些嚴重的麻煩。

如果您只需要readlines()write(),然後你可以用Queue

class QueueStream(object): 
    def __init__(self): 
     self._queue = Queue() 

    def write(self, line): 
     self._queue.put(line) 

    def readlines(self): 
     while True: 
      item = self._queue.get() 
      yield item 
      self._queue.task_done()