2009-09-02 5 views
13

Я написал класс буфера, который обеспечивает файла-подобный интерфейс с read, write, seek, tell, flush методы в виде простой строки в памяти. Конечно, он неполный (например, я не писал readline). Цель состоит в том, чтобы заполнить фоновый поток из какого-то внешнего источника данных, но позволить пользователю относиться к нему как к файлу. Я ожидаю, что он будет содержать относительно небольшой объем данных (может быть, 50K макс.)питон файл-подобный объект буфера

Есть ли лучший способ сделать это, вместо того чтобы писать его с нуля?

ответ

19

Вы можете использовать стандартные модули Python StringIO или cStringIO для получения буфера в памяти, который реализует file interface.

cStringIO выполнен на C и будет быстрее, поэтому вы должны использовать эту версию, если это возможно.

Если вы используете Python 3 вы должны использовать io.StringIO вместо StringIO и io.BytesIO вместо cStringIO.

+0

Я думаю, что это то, что я ищу. Но являются ли эти классы потокобезопасными? У меня будут отдельные потоки чтения и записи. – djs

+0

Pythons GIL означает, что безопасность потоков крайне маловероятна, поскольку два потока не выполняются одновременно. –

+9

Это не делает его потокобезопасным. Если бы это было так, нам не нужна безопасность потоков на одноядерных процессорах. – Kylotan

6

Я думаю, вы могли бы искать StringIO.

Смежные вопросы