問題タブ [zodb]

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.

0 投票する
0 に答える
365 参照

pagination - ピラミッド + ZODB とページネーション

ピラミッド ZODB アプリに画像を保存しました。そして、すべての画像を一覧表示するビューがありますが、画像が多いとページのレンダリングが長すぎたり遅くなったりするため、ページごとに 15 個の画像をページ付けする必要があります。

Webヘルパーに関するWeb上のかなりの例を見てきましたが、すべてSQL用です。ZODBでWebヘルパーを使用する方法はありますか? または、ZODB のページネーション用の他のライブラリはありますか?

0 投票する
1 に答える
161 参照

python - コミット後のオブジェクト変更のための ZODB フックはありますか?

コミット後の ZODB オブジェクトの変更で起動するフックをセットアップするにはどうすればよいですか? IObjectWillBeMovedEvent と IObjectWillBeAddedEvent のハンドラーをセットアップできますが、これらはオブジェクトの作成時にすぐに起動します。変更がコミットされたときにのみ起動する、使用できる他のイベントまたはフックはありますか?

0 投票する
1 に答える
491 参照

python - ZODB とトルネード

Tornadoで構築された小さな Web アプリがあり、データ ストレージにZODBを使用したいと考えています。ZODB ドキュメントによると、マルチスレッド プログラムはサポートされていますが、スレッドごとに新しい接続を開始する必要があります。それは私が何かをしなければならないことを意味すると思います

まず、新しい接続は、すべての db 対話ハンドラーまたは書き込みを行うハンドラーにまだ必要ですか? 起動時に 1 つの接続を開始し、それをすべての読み取りに使用してから、何かを書き込む必要がある場合にのみ上記の接続の歌と踊りを行うのは合理的でしょうか?

第二に、Python でそのパターンを抽象化する慣用的な方法は何ですか? 私は次のようなものを持っています

心に留めていますが、それはおそらく私の Lisp の表示です。

アプローチに関する一般的なヘッドチェックも歓迎します。

0 投票する
1 に答える
478 参照

python - ZODB pool_size の適切な設定

マルチスレッド Web アプリケーションpool_sizeの呼び出しでの妥当なデフォルトは何ですか?ZODB.DB

実際のデフォルト値のままにしておくと、データベースと対話するハンドラーをナビゲートするのが私だけであっても、7いくつかの接続が得られます。WARNING高すぎる数値を設定することはできますか? 正確に何を設定するかを決定する要因は何ですか?

0 投票する
2 に答える
247 参照

python - ZODB バックアップのエラー

私は indico 0.92 を持っていて、ZODB でバックアップしています。

このプログラムを何度も実行すると、突然バックアップがエラーで停止します。

ZODB バックアップが機能しなくなる原因は何ですか?

シュロミット

0 投票する
2 に答える
671 参照

python - Celery ワーカーが ZEO データベース アクセスでハングする (競合状態?)

問題

ZEO サーバーにアクセスするパッケージを使用すると、Celery ワーカーがタスクの実行でハングします。ただし、 内でサーバーに直接アクセスする場合は、tasks.pyまったく問題ありません。

バックグラウンド

ZODBファイルを読み書きするプログラムがあります。複数のユーザーがこのデータベースに同時にアクセスして変更できるようにしたいので、複数のプロセスとスレッド間で安全にするZEO サーバーでデータベースを管理します。プログラムのモジュール内でデータベースを定義します。

SSCCE

私は明らかにもっと複雑な操作を試みていますが、ルート オブジェクトまたはその子のキーのみが必要であると仮定しましょう。このコンテキストで問題を作成できます。

dummy_package上記のコードを使用して、モジュール とdatabases.py、データベース アクセスを実行するための必要最小限のモジュールを作成します。


でデータベース アクセスを試行しない場合dummy_package、データベースをインポートしてルートに問題なくアクセスできます。

ただし、接続または子を渡そうとするとroot、タスクが無期限にハングします。

違いがある場合、これらの Celery タスクは Django によってアクセスされます。

質問

では、まず、ここで何が起こっているのでしょうか。この方法で ZEO サーバーにアクセスすることによって何らかの競合状態が発生することはありますか?

すべてのデータベースに Celery の責任でアクセスさせることもできますが、それでは醜いコードになってしまいますさらに、スタンドアロン プログラムとして機能するプログラムの機能が損なわれます。Celery ワーカーによって呼び出されるルーチン内で ZEO と対話することはできませんか?

0 投票する
1 に答える
179 参照

python - ZODB で異なるキーを同時に変更する

Web サービスを介して変更されるオブジェクトの永続ストレージとして ZODB を使用しています。以下は、問題を減らした例です。インクリメント関数は、複数のスレッドから呼び出されるものです。私の問題は、インクリメントが 2 つのスレッドから異なるキーに対して同時に呼び出されると、競合エラーが発生することです。

少なくとも異なるキーが適切な方法で変更されている限り、これを解決できるはずだと思いますか? もしそうなら、私は方法の例を見つけることができませんでした... (zodb のドキュメントは、さまざまなサイトに分散しているようです :/ )

どんなアイデアでも嬉しい...

0 投票する
2 に答える
300 参照

python - 複数の ZODB データベースを一緒に追加する

ZODB モジュールを使用して構築した 3 つの Python オブジェクト データベースがあり、それらを 1 つにマージしたいと考えています。1 つではなく 3 つある理由は、各オブジェクトが 3 つの集団の 1 つに属し、コードがそのオブジェクトの分析を実行するとデータベースに追加されたためです。各オブジェクトの分析は、確実に並行して実行できます。私のコードは実行に数日かかるため、これが 1 週間に及ぶ作業にならないように、3 台のコンピューターでそれぞれ 3 つの母集団のいずれかからオブジェクトを処理し、完了すると 1 つの ZODB データベースを出力します。ZODB が競合を処理する方法が原因で、3 台のコンピューターで異なる母集団からのオブジェクトの分析を同じデータベースに追加することはできませんでした。基本的に、データベースを閉じるまでは内部からロックされています。

私の質問は次のとおりです。1) 複数の .fs データベース ファイルを単一のマスター データベースにマージするにはどうすればよいですか? 各データベースの構造はまったく同じです。つまり、辞書構造はそれぞれで同じです。例として、MyDB は最初の母集団の ZODB データベース構造を表す場合があります。

ここで、省略記号はより多くの同じものを表します。キー「property1」、「property2」などの名前は、データベース内の各「IDXXXXXX」キーですべて同じですが、値は確かに異なります。

2) 単一の ZODB 構造を生成しながら、このコードを並行して実行するにはどうすればよかったでしょうか?

説明が必要な場合はお知らせください。

ありがとう!

0 投票する
1 に答える
185 参照

cherrypy - チェリーピーでデータベースから切断する標準的な方法は?

私はcherrypyでzodbを使用しています。jinja2 テンプレートにデータを渡しています。テンプレート レンダリングを返す前に、zodb 接続を閉じたいと思います。

データがzodbデータであるため、レンダリング時にテンプレートが接続を必要とするため、できません。

これはエラーになります...

すでに戻ってきた後に zodb conn を閉じるにはどうすればよいですか? 常にデータベース接続を持つように定義できる「リクエスト前」および「リクエスト後」関数はありますか? チェリーピーのドキュメントには、「公開された関数の先頭で明示的に実行し、戻る前に閉じる」という点を除けば、データベース接続に関する明示的なものはあまりありません。

それとも、言うのが標準的な慣行ですか...