2009-09-02 9 views
13

私は、メモリ内の単純な文字列にread,write,seek,tellflushというメソッドを持つFile-likeインターフェイスを提供するバッファクラスを作成しました。もちろん、それは不完全です(例えば、私はreadlineを書きませんでした)。その目的は、いくつかの外部データソースからのバックグラウンドスレッドで満たされることですが、ユーザーがファイルのように扱うようにします。私はそれが比較的少量のデータ(おそらく最大50K)を含むと予想しています。pythonファイルのようなバッファオブジェクト

これを最初から書き込むのではなく、より良い方法がありますか?

答えて

19

標準のPythonモジュールStringIOまたはcStringIOを使用して、file interfaceを実装するインメモリバッファを取得できます。

cStringIOはC言語で実装されているため、処理速度が向上するため、できるだけそのバージョンを使用してください。

あなたがPython 3を使用している場合は、StringIOの代わりにio.StringIOを使用し、cStringIOの代わりにio.BytesIOを使用する必要があります。

+0

私はそれが私が探していると思います。しかし、これらのクラスはスレッドセーフですか?私は別々のリーダースレッドとライタースレッドを持っています。 – djs

+0

Pythons GILは、2つのスレッドが同時に実行されないため、スレッドの安全性が問題になる可能性は非常に低いことを意味します。 –

+9

これはスレッドセーフではありません。もしそうなら、我々はシングルコアプロセッサ上でスレッドの安全性を必要としませんでした。 – Kylotan

6

私はあなたがStringIOを探しているかもしれないと思います。

関連する問題