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