問題タブ [cstringio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python - Pyramid と matplotlib - SVG を出力するビューを複数持つことはできませんか?
円グラフを使用して統計をグラフ化するために複数の SVG イメージを作成する予定の Python Pyramid アプリケーションを開発しています。私のテストでは、1 つの SVG ビューが正しく機能し、2 番目の SVG 出力ビューを追加するとすぐに、2 番目の SVG 画像が読み込まれることがわかりました (SVG 画像の読み込み順序は関係ありません)。このビューを参照する別のビューでは、SVG ファイルをロードするためのその他の呼び出しで SVG イメージが「結合」されます。これは、メモリが適切にクリアされていないように見えるため、Python スタックのどこかにバグがあるようです (主に複数の SVG ファイルの場合、以下の詳細を参照してください)。また、十分な数の画像/ページがロードされると、TclError が発生することにも注意してください。
私はより多くのビューを持つより詳細なアプリケーションで SVG を使用していたので、最小化/縮小されたアプリケーションでこれを再現して、それが私が行っている特別なことではなく、このコードが Pyramid alchemyテンプレートとデータベースから直接生成されていることを示しています。通話は関係ありません。このデータベースは、詳細アプリケーションで積極的に利用されています。このアプリケーションには 3 つのビューしかありません。最初のビューは元のテンプレートの一部です。また、DEBUG ロギングを追加して、他の SVG ビューの内部呼び出しがあることを示す兆候がないことを明確にしています。
一部のビュー コードは、文字列としての Matplotlib svg に基づいており、主にStringIO
. 円グラフが必要であるため、それが私のコードが参照されている質問のコードと異なる主な理由であることに注意してください。StringIO
を使用してもを使用しても、問題は本質的に同じであることがわかりましたcStringIO
。私のコードでは、cStringIO
.
完全なアプリケーション コードは、https ://github.com/danielpronych/pyramidapp で入手できます。
PyPlot ドキュメンテーション:: pyplot api
更新: 最初の SVG ビューからのコード (図のハンドルと閉じるコマンド):
このコードの手順:
- http://localhost:6543/test.svg を読み込む
- http://localhost:6543/test2.svg を読み込む
- (1)または(2)のいずれかを再度ロードしてください。
pserve
コマンドウィンドウからの兆候なしに連続して「スピン」するのはなぜですか。
注:このコードで同じ SVG ビューを 3 回ロードすると、上記の手順と同じ結果になりますが、以下のコードでは発生しません。
また、pyplot パイにはリターンがあることに注意してください。ただし、それ自体は「ハンドル」ではありません。
pserve
1分以上待っても(特に上記の手順を実行した後)、ウィンドウがControl + Cコマンドに応答しません。
最初の SVG ビューからのコード (オリジナル、以下の手順はこのコードからのもの):
Python バージョン: Python 2.7.5
Python パッケージの構成 (プライマリ パッケージのみ)
- ピラミッド-1.6a1-py2.7
- matplotlib-1.4.3-py2.7-win32
再現するために取られた手順:
- ピラミッドアプリを保存します。
指示:pserve development.ini --reload
これは正しく機能することに注意してください
これにより、両方の SVG ファイルが「結合」されることに注意してください。
これは test2.svg とまったく同じように機能することに注意してください。タイトルも同じで、同じ長さであり、画像もこのビューで結合されます。
今回は test.svg の前にこのビューがロードされたため、これは最初のロードで適切に機能することに注意してください。
Control+C を使用して pserve プロセスを終了したときのトレースログ
重要: SVG 画像が十分に読み込まれると、次のようになります。
現在これを修正する唯一の方法は、再起動することpserve
です。my_view
また、SVG 画像がそのようなビューによって参照または利用されない限り、ロードなどのビューが適切に読み込まれることにも注意してください。
もう 1 つの重要な注意点は、SVG ファイルが 1 つだけ、つまりhttp://localhost:6543/test.svgが常にロードされているpserve
限り、明らかな問題なしにイメージを (潜在的に) 無限に再ロード/更新できるように見えることです。または以下に遭遇:
更新 (2015 年 9 月): Sergey からのさらなる更新を期待していました。しかし、彼の解決策では問題は解決されませんでした。かなりの時間を待っても何も起こらなかったため、私の解決策だけが実際にこの問題を解決したことがわかりました。最後に、明確にするために、この問題はバッチ処理でも表面化するため、私のソリューションは Web ベースの実装とバッチ処理で機能します。
python - cStringIO.StringO は、ファイルが 1kByte より小さい場合、アップロードされたファイル ストリームの保存に失敗します
ファイルストリームをディスクに保存するためにこのコードを借りましたが、ファイルのサイズが 1kb 未満の場合を除いて機能します。次のエラーが表示されます。
AttributeError: 'cStringIO.StringO' オブジェクトに属性 'name' がありません
では、cStringIO.StringO がアップロードされた小さなファイルを確実に処理するにはどうすればよいでしょうか?
python - マルチスレッド cstringio は、ubuntu 14.04 で 17% 遅くなります
次のプログラムを実行しています。
まったく同じハードウェアを備えたマシンで、一方はubuntu 10.04を実行し、もう一方は14.04を実行しています。10.04 では 1409.54 秒かかるのに対し、14.04 では 1656.81 秒かかり、14.04 では 17% のパフォーマンス低下を示しています。何か案は?
python - PYVISA の ENUM モジュールと cStringIO モジュール
直さなければならない問題があります。Python 3.2 32ビット用のPython 3.2を使用してpyvisa
います。私が使用したとき:
次のように表示されました。
しかし、私が使用するとき:
私は得る:
pyvisa
GPIBでAgilent 33250aを使用するために使用したいだけです。
python - 実際のファイル オブジェクトは StringIO や cStringIO より遅いですか?
StringIO
コードには次の注意事項があります。
「実際のファイルの方が速いことが多い」という行は、私には本当に奇妙に思えました。ディスクへの書き込みがメモリへの書き込みよりも優れているのはなぜでしょうか? これらのさまざまなケースのプロファイリングを試みたところ、これらのドキュメントと矛盾する結果と、この質問への回答が得られました。この他の質問は、ここでは連結を行っていませんが、状況によっては cStringIO が遅くなる理由を説明しています。このテストでは、指定された量のデータをファイルに書き込み、最初にシークして読み戻します。「新しい」テストでは毎回新しいオブジェクトを作成し、「同じ」テストでは繰り返しごとに同じオブジェクトを切り捨てて再利用し、オーバーヘッドの原因を排除しました。このオーバーヘッドは、データ サイズが小さいが大きいものではない一時ファイルを使用する場合に重要でした。
コードはこちらです。
2 つのStringIO
実装はかなり似ていましたが、cStringIO
データ サイズが大きいと速度が大幅に低下しました。しかし、tempfile.TemporaryFile
常に最も遅い の 3 倍の時間がかかりましたStringIO
。
python - tempfile.TemporaryFile と StringIO の比較
ZOCacheのさまざまな文字列連結方法を比較する小さなベンチマークを作成しました。
したがって、ここでは tempfile.TemporaryFile のように見えますが、何よりも高速です。
私が使用しているベンチマークコード:
編集 Python3.4.3 + io.BytesIO
io.BytesIO を使用した新しいソース:
それはすべてのプラットフォームに当てはまりますか? もしそうなら、なぜですか?
編集: 固定ベンチマーク (および固定コード) の結果:
python - カラー画像の代わりに平坦化された配列を返す misc.imread を使用して URL から画像を読み取る
URL から画像を読み込もうとしています (Google の Static Maps API によって提供されます)。
画像はブラウザで正常に表示されます。
しかし、misc.imread を使用して配列にロードしようとすると、最終的に 2 次元配列になるようです (つまり、平坦化され、RGB カラーはありません)。
これが私が使用しているコードです(APIキーを隠しました):
私が期待していたのは、形状の 3 次元配列 (278, 256, 3) でした。
たぶん、ファイルを正しく読み取っていませんか?
python - StringIO、cStringIO、および ByteIO についての混乱
これらのバッファモジュールの違いをグーグルで検索し、SOでも検索しました。しかし、私はまだよく理解していません。私が読んだ記事のいくつかは古くなっていると思います。
Python 2.7.11 では、特定の形式のバイナリ ファイルを を使用してダウンロードしましたr = requests.get(url)
。次に、コンテンツを解析するために設計された関数にStringIO.StringIO(r.content)
, cStringIO.StringIO(r.content)
andを渡しました。io.BytesIO(r.content)
これら 3 つの方法はすべて利用可能です。つまり、ファイルがバイナリであっても、StringIO
. なんで?
もう1つのことは、それらの効率に関するものです。
上図のように、cStringIO > StringIO > BytesIO
.
io.BytesIO
常に新しいコピーを作成するため、より多くの時間がかかると誰かが言及しているのを見つけました。しかし、これが後の Python バージョンで修正されたという投稿もいくつかあります。
IO
では、最新の Python 2.x と 3.x の両方で、これらの s を完全に比較できる人はいますか?
私が見つけた参照の一部:
- https://trac.edgewall.org/ticket/12046
io.StringIO には Unicode 文字列が必要です。io.BytesIO にはバイト文字列が必要です。StringIO.StringIO は、Unicode またはバイト文字列のいずれかを許可します。cStringIO.StringIO には、バイト文字列としてエンコードされた文字列が必要です。
しかしcStringIO.StringIO('abc')
、エラーは発生しません。
https://review.openstack.org/#/c/286926/1
StringIO クラスは、特にサブユニット v2 がバイナリで文字列ではないことを考えると、これに使用するクラスとしては不適切です。
http://comments.gmane.org/gmane.comp.python.devel/148717
cStringIO.StringIO(b'data') はデータをコピーしませんでしたが、io.BytesIO(b'data') はコピーを作成します (データが後で変更されていない場合でも)。
この投稿には 2014 年の修正パッチがあります。
- ここにリストされていないSOの投稿がたくさんあります。
Eric の例の Python 2.7 の結果は次のとおりです。
2.7 に関しては、cStringIO.StringIO
とStringIO.StringIO
は よりもはるかに効率的ですio
。