問題タブ [pickle]
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 - copy.deepcopy と pickle
コレクションにはモデルが含まれ、モデルにはウィジェットが含まれるなど、ウィジェットのツリー構造があります。コレクション全体をコピーしたいのですcopy.deepcopy
が、オブジェクトを「ピクルしてピクル解除」するよりも高速ですが、C で記述されている cPickle の方がはるかに高速です。
- deepcopy の代わりに常に cPickle を使用すべきではないのはなぜですか?
- 他のコピーの代替手段はありますか?pickle は deepcopy よりも遅いですが、cPickle は高速であるため、deepcopy の C 実装が勝者になる可能性があります。
サンプル テスト コード:
タイミング:
python - PicklingError: ピクルできません: decimal.Decimal と同じオブジェクトではありません
これは、今日 <a href"http://filmmaster.com">filmmaster.com で表示されたエラーです:
それは正確にはどういう意味ですか?あまり意味がないようです... djangoキャッシングに関連しているようです。ここでトレースバック全体を確認できます。
また、Filmaster のソース コードは、bitbucket.org/filmmaster/ filmmaster-testからダウンロードできます。
どんな助けでも大歓迎です。
python - Python 2.6はキュー/パイプ/などを介して接続オブジェクトを送信します
このバグ (Python Issue 4892)があると、次のエラーが発生します。
Connection オブジェクトを Queue に渡すための回避策を知っている人はいますか?
ありがとうございました。
python - pyodbc を使用した Python のマルチプロセッシングとデータベース アクセスは「安全ではありません」?
問題:
次のトレースバックが表示されますが、その意味や修正方法がわかりません。
状況:
処理するデータでいっぱいの SQL Server データベースがあります。multiprocessing モジュールを使用して作業を並列化し、コンピューターの複数のコアを利用しようとしています。私の一般的なクラス構造は次のとおりです。
- MyManagerClass
- これは、プログラムが開始されるメイン クラスです。
- 2 つの multiprocessing.Queue オブジェクトを 1 つと 1 つ作成します
work_queue
。write_queue
- また、他のプロセスを作成して起動し、それらが終了するのを待ちます。
- 注: これはmultiprocessing.managers.BaseManager() の拡張ではありません
- MyReaderClass
- このクラスは、SQL Server データベースからデータを読み取ります。
- にアイテムを入れます
work_queue
。
- MyWorkerClass
- ここで作業処理が行われます。
- からアイテムを取得し、
work_queue
完成したアイテムを に入れwrite_queue
ます。
- MyWriterClass
- このクラスは、処理されたデータを SQL Server データベースに書き戻す役割を担います。
- からアイテムを取得します
write_queue
。
アイデアは、1 人のマネージャ、1 人のリーダー、1 人のライター、および多数のワーカーが存在するというものです。
その他の詳細:
私は stderr で 2 回トレースバックを取得するので、リーダーに対して 1 回、ライターに対して 1 回発生すると考えています。ワーカー プロセスは正常に作成されますが、KeyboardInterrupt を送信するまでそのまま待機しwork_queue
ます。
リーダーとライターの両方が、初期化時に作成されたデータベースへの独自の接続を持っています。
解決:
このソリューションにつながった回答と質問について、Mark と Ferdinand Beyer に感謝します。彼らは、Cursor オブジェクトが "pickle-able" ではないことを正しく指摘しました。これは、マルチプロセッシングがプロセス間で情報を渡すために使用する方法です。
私のコードの問題は、MyReaderClass(multiprocessing.Process)
両方がメソッドMyWriterClass(multiprocessing.Process)
でデータベースに接続されていることでした。__init__()
これらの両方のオブジェクトを で作成し (つまり、init メソッドと呼びます) MyManagerClass
、次に を呼び出しstart()
ました。
したがって、接続オブジェクトとカーソル オブジェクトを作成し、それらを pickle 経由で子プロセスに送信しようとします。私の解決策は、接続オブジェクトとカーソル オブジェクトのインスタンス化を、子プロセスが完全に作成されるまで呼び出されない run() メソッドに移動することでした。
python - pickle エラーが原因で、Django キャッシュ API でのオブジェクトの設定が失敗する
Django キャッシュ API でオブジェクトを手動で設定しようとしていますが、失敗します (酸洗いが原因だと思いますか?) オブジェクトはサードパーティから提供されたもので、私のコードは次のとおりです。
これを実行するとエラーが発生します。
私はPythonに非常に慣れていません。これを解決する最善の方法を考えています。最初に何かをピクルする必要がありますか?
python - pickle 後にファイル サイズが劇的に増加する
私はファイルを読み込んで、暗号化前後のデータのハッシュとともに、(暗号化された) データを辞書に送信しています。次に、辞書をピクルしますが、ソース ファイルのサイズに比べてファイル サイズが大きいことがわかります。暗号化されたデータをファイルに直接書き込むと、サイズはソースと同じになります。私の漬物ファイルがとても大きい理由は何ですか?
pickle - PERFORCEの「ピクルス」バイナリ出力を解析する方法は?
Perforceコマンドラインには特別なスイッチ-Gがあり、Pythonの「pickle」シリアル化形式を使用して出力を機械可読にすることができます。一般的に、これは実際にそうですか?
たとえば、の出力について考えてみますp4 -G diff -duw3 <file1> <file2> <file3>
。私が知る限り、出力は次のシーケンスです:pickle、raw diff、pickle、raw diff、pickle、rawdiff。ピクルス/差分の境界を確実に特定できるようにする区切り文字は含まれていないようです。
私は何かが足りないのですか、それともこの「機械可読」フォーマットは実際には機械可読ではありませんか?出力でピクルスと生の差分の境界を見つけるにはどうすればよいですか?
python - ValueError: 安全でない文字列ピクル
cPickle を使用してダンプしたものをロードしようとすると、次のエラー メッセージが表示されます。
ダンプとロードの両方の作業が同じコンピューターで行われるため、同じ OS: Ubuntu 8.04.
どうすればこの問題を解決できますか?
python - WindowsでピクルスにされたファイルをMacでアンピックできません
ファイルにピクルス化(ダンプ)する単純なクラスがあります。OS Xではこれは正常に機能し、Windowsではこれは正常に機能します。
ただし、Windowsではオブジェクトを正常にロード/選択解除できます。Windowsがこのファイルを選択してディスクに保存すると、OS Xでは読み取れなくなります(ただし、Windowsでは通常どおり動作します)。
OS Xから返されるエラーは、requireクラスをインポートできないことです。
窓に何も漬けない限り、これはすべてうまくいくので、私は混乱しています!(それでも、Windowsでは正常に動作します)
行末かもしれないと聞きましたが、他の考えは、使用されているエンコーディングタイプがオペレーティングシステム間で異なることに関係している可能性がありますか?しかし、私はこの問題を完全に診断および/または解決するために何を試みるべきか本当にわかりませんので、どんな助けもいただければ幸いです!
python - 漬け物ができないマルチプロセッシングPool.map()を使用する場合
multiprocessing
のPool.map()
関数を使用して、作業を同時に分割しようとしています。次のコードを使用すると、正常に機能します。
ただし、よりオブジェクト指向のアプローチで使用すると、機能しません。表示されるエラーメッセージは次のとおりです。
これは、以下が私のメインプログラムである場合に発生します。
そして、以下は私のsomeClass
クラスです:
問題が何であるか、またはそれを回避する簡単な方法を知っている人はいますか?