0

継続的に対話できるように、Python クラスを永続的に存続させたいと考えています。この理由は、このクラスは非常にメモリを集中的に使用するためです。つまり、(1) 複数回メモリに収めることができず、(2) クラスのロードが非常に遅くなります。

PyroRPYCの両方を使用してこれを実装しようとしましたが、これらのパッケージは常にオブジェクトを削除し、新しいリクエストが行われるたびに新しいオブジェクトを作成するようです (これはまさに私がやりたくないことです)。 Pyro の次のオプションを見つけました:

@ Pyro4.behavior(instance_mode="single")

これにより、単一のインスタンスのみが作成されます。ただし、複数のリクエストが同時に行われる可能性があるため、これが 100% 安全であるとは言えません。私がやろうとしていることを達成するためのより良い方法はありますか?

よろしくお願いします。(私はかなり長い間これに苦労してきました)。

L

4

1 に答える 1

1

クラスをスレッド セーフにしたくない場合は、 に設定できます。これSERVERTYPEにより"multiplex"、すべてのリモート メソッド呼び出しが順番に処理されるようになります。

https://pythonhosted.org/Pyro4/servercode.html#server-types-and-concurrency-model :

多重化サーバー (servertype "multiplex")

このサーバーは、接続マルチプレクサを使用して、すべてのリモート メソッド呼び出しを順次処理します。このサーバーではスレッドは使用されません。お使いのプラットフォームで利用できる最適なセレクター (kqueue、poll、select) を使用します。これは、一度に 1 つのメソッド呼び出しのみが実行されていることを意味するため、完了するまでに時間がかかる場合は、他のすべての呼び出しが順番を待っています (別のプロキシからのものであっても)。クラスの登録に使用されるインスタンス モードによって、インスタンスへの同時アクセスが行われる方法が変わることはありません。常にアクティブな呼び出しは 1 つだけです。スレッドがないため、オブジェクトが異なるスレッドから同時に呼び出されることはありません。Pyro があなたのクラスのインスタンスをいつ、どのくらいの頻度で作成するかに影響します。

于 2016-11-09T00:24:35.550 に答える