1
有沒有辦法讓StringIO.readlines()阻塞,直到流關閉或通過write()使新數據可用?阻止版本StringIO.readlines()
我正在寫一個接口,希望像對象一樣阻塞文件,並且在將數據寫入到StringIO實例之前立即返回。使用initial_value參數也不是一個選項,因爲我需要使用中間結果。
另外還有任何其他(文本)文件就像在Python中的FIFO /流?
有沒有辦法讓StringIO.readlines()阻塞,直到流關閉或通過write()使新數據可用?阻止版本StringIO.readlines()
我正在寫一個接口,希望像對象一樣阻塞文件,並且在將數據寫入到StringIO實例之前立即返回。使用initial_value參數也不是一個選項,因爲我需要使用中間結果。
另外還有任何其他(文本)文件就像在Python中的FIFO /流?
如果您使用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()
誰寫入流?其他線程?如果是這樣,你可以使用[隊列](http://docs.python.org/2/library/queue.html)。 – 2013-05-01 13:54:58
我在一個線程中寫入流,數據在另一個線程中讀取。我不能使用隊列,因爲接口期望獲得像對象一樣的文件。 – Perseids 2013-05-01 15:06:26