阻止版本StringIO.readlines()

时间:2013-05-01 13:34:26

标签: python python-3.x

有没有办法让StringIO.readlines()阻塞,直到关闭流或通过write()使新数据可用?

我正在编写一个接口,它希望阻塞文件类对象,并且在我可以将数据写入StringIO实例之前立即返回。使用initial_value参数也不是一个选项,因为我需要使用中间结果。

或者在python中还有其他(文本)文件,如fifo / stream吗?

1 个答案:

答案 0 :(得分: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()