1

Python 2.7 ランタイムで Google App Engine を使用しています。マルチスレッドであることは知っていますが、Google App Engine のマルチインスタンスの性質により、この質問はどのランタイムにも関連しています。

私はウェブメッセンジャーアプリケーションを持っています。これは、さまざまな通知 (メッセージの受信、ユーザーの接続、ユーザーの入力) を受信するためのチャネル API と、グローバル状態を維持するための Memcache API (およびメッセージ履歴を実際に保存するための高レプリケーション データストア) に基づいています。最後のメッセージのタイム スタンプは Memcache に保持されます (ユーザーがオンラインかどうか、入力しているかどうかなどの他のデータと共に)。ユーザーがメッセージを送信するたびに、Memcache は新しいタイム スタンプ値で更新されますが、古いタイム スタンプ値は Channel API を使用して送信されます。複数のメッセージが同時に送信されると、Memcache が上書きされることがあり、そのタイム スタンプに奇妙な値が表示されます。たとえば、あるメッセージには特定のタイム スタンプがあり、のメッセージには古いタイム スタンプがあります。タイムスタンプ。

Memcache クライアント API については知っていますが、最新のタイム スタンプを最初に読み取り、新しいタイム スタンプを書き込む必要があるため、それを使用できません。

要するに、(Memcache?) データが完全に占有されていない (読み取りまたは書き込み) まで何らかの方法で待機し、何らかの方法でロックし、リクエスト全体を処理してから、次のリクエストのために解放したいと考えています。

助言がありますか?

前もって感謝します。:)

4

1 に答える 1

1

Memcache API には明示的なロック機能はありませんが、 Compare-and-Setメカニズムを使用して効果を得ることができます。Guido はここに例を書いています。ただし、Client クラスのみが CAS を公開しますが、それがうまくいかない理由はあなたの説明からはわかりません。

于 2012-05-19T23:15:44.450 に答える