2013-05-01 34 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()