問題タブ [rpyc]

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 投票する
2 に答える
11643 参照

python - PyRoとRPyCのPythonライブラリの長所と短所は何ですか?

Python用のリモートプロシージャコールエンジンを探していますが、PyRo(Pythonリモートオブジェクト)RPyC(リモートPythonコール)の両方が私が探しているものであることがわかりました。

しかし、私はそれらが互いにどのように比較され、それらの長所と短所は何であるかを知りたいです。

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

python - PyScripter Rpyc

Rpyc を PyScripter にインストールする方法について、誰かが私にいくつかのガイドラインを教えてくれるかもしれません。Python 2.6 で PyScripter 1.9.9.7 を使用しています。私はそれをグーグルで検索していくつかの指示を見つけましたが、まだ成功していません...

ありがとう!

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

python - rpyc を使用してデータベースに一度接続し、複数のクエリを処理する

データベース クエリの結果をアドホックなクライアント リクエストに提供しようとしているが、個々のクエリごとに接続を開きたくない。私はそれを正しく行っているかどうかわかりません。

現在の解決策は、「サーバー」側で次のようなものです(明確にするために大幅に削減されています):

これでしばらくは問題なく動きます。ただし、プログラムがクラッシュすることがありますが、これまでのところ、いつクラッシュするかを追跡できませんでした。

私が確認したいのは、data_service クラスの外部でデータベース接続がどのように作成されるかを確認することです。これ自体が問題を引き起こす可能性はありますか?

どうもありがとうございました。

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

python - rpyc でリモート オブジェクトを返す

以下のようなリモートサーバーがあり、すでに初期化されたクラスがあり、プロトコル構成を allow public attrs True として設定しています。

クライアント側で直接接続しようとすると動作しますが、関数内で接続してオブジェクトを返そうとするとエラーが発生します

**クライアント**

**直接接続**

関数で実行しようとすると、エラーが発生します;(

私の目的は、サーバーでオブジェクトを初期化し、多くのクライアントがそれにアクセスできるようにすることです。初期化されたクラスはスレッド セーフであるため、複数のクライアントが使用できます。

これをしているうちに何かが足りないことに気づきました。

--

アディシア

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

python - Python rpyc は psutil コマンドをリモートで実行できません

psutilリモートでコマンドを実行しようとしています:

エラーが発生しました:が、両方 (リモートとローカルホスト) に"ImportError: No module named psutil"インストールしました。psutil

import osたとえば、使用してテストすると、正常に動作します。

ヒント?

ありがとうございました。

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

rpyc - リモートコンソールでRPyCのclassic_serverを再起動するには?

リモートコンソールから Linux の RPyC の classic_server を再起動したいのですが、再起動の
方法がわかりません。

そのため、bash を作成してすべての python プロセスを強制終了し、
classic_server を再起動します
が、サブプロセスを介してリモート コンソールで呼び出すと、addr は既に使用されていると表示されます。

デバッグは、私がpythonを殺す前に、pythonが18812をリッスンしているポートclassic_serverでリッスンしていることを示しています
が、bashスクリプトがそれを殺した後、bashスクリプトがclassic_serverの代わりにポート18812をリッスンしました! とても奇妙ですよね?

クラシックサーバーを再起動する方法、または問題を解決する方法をお願いします

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

django - 分岐前の RPC サーバーを使用して、Django Web アプリケーションへの計算集約型の要求を処理する

nginx の背後にある Gunicorn をリバース プロキシとして使用して、Django ベースの Web サービスを実行しています。

私の Web サービスは、MATLAB の外部インスタンスを使用して計算を実行する Django ビューを提供します。MATLAB の起動には数秒かかるため、非常に単純な MATLAB 計算のみが発生する要求であっても、応答するのにこの時間を必要とします。

さらに、私のコードでは MATLAB サンドボックス化が行われているため、Web サーバー プロセスに対して同時に実行される MATLAB インスタンスは 1 つだけであることが重要です。(したがって、現在、分岐前の Web サーバーを実装するが、マルチスレッドを使用しない Gunicorn 同期ワーカー モデルを使用しています。)

ユーザー エクスペリエンスを向上させるために、いくつか (たとえば 3 ~ 5 個) の "準備ができている" MATLAB インスタンスを実行し続け、要求が受信されたときにそれらを使用することで、MATLAB 起動の待ち時間をなくしたいと考えています。要求が処理された後、MATLAB プロセスは終了し、新しいリクエストがすぐに開始され、別のリクエストに備えることができます。

私はこれを行うための2つの方法を評価してきました:

  1. Gunicorn 同期ワーカー モデルを引き続き使用し、Web サーバー プロセスごとに 1 つの MATLAB インスタンスを保持します。

    これに関する問題は、着信要求が Web サーバーのワーカー プロセスにラウンド ロビン方式で分散されないことです。したがって、計算集約型のすべての要求が同じプロセスにヒットし、その単一の MATLAB インスタンスを必要な速度で再起動できないため、ユーザーは依然として待機する必要がある場合があります。

  2. MATLAB の計算をバックエンド サーバーに外注します。バックエンド サーバーは実際の作業を行い、RPC を介して Web サーバー プロセスによって照会されます。

    私の考えでは、多数の RPC サーバー プロセスが実行されており、それぞれが実行中の MATLAB プロセスをホストしています。要求が処理された後、MATLAB プロセスが再起動されます。RPC サーバー プロセスはラウンド ロビンでクエリされるため、ユーザーは MATLAB の開始を待つ必要はありません (全体的に要求が多すぎる場合を除きますが、それは避けられません)。

最初のアプローチで説明した問題のため、RPC サーバー (アプローチ 2) が私の問題に対するより良い解決策になると思います。

Python 用の RPC ソリューション (特に Pyro と RPyC) をいくつか調べましたが、RPC サーバーにフォーク前のサーバー モデルを使用する実装を見つけることができません。サンドボックスがあるため、マルチスレッド化は不可能であり、接続が受け入れられた後にのみサーバーが分岐する場合は、その後も MATLAB を起動する必要があり、アイデア全体が妨げられることを覚えておいてください。

私の問題に対するより良い解決策を知っている人はいますか? それとも、RPC サーバーが実際に最適なソリューションでしょうか? しかし、その場合、事前にフォークする RPC サーバー (= いくつかのプロセスをフォークし、それらすべてを同じソケットの accept() でスピンさせる) か、少なくとも事前に簡単に変更できる (モンキーパッチ?) RPC フレームワークが必要になります。 -フォーク。

前もって感謝します。

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

python - rpycでオブジェクトを渡すと失敗します

クライアントからサーバーにRPyCを使用してオブジェクトをパラメーターとして渡そうとしています。しかし、サーバーはオブジェクトにアクセスできず、AttributeErrorを受け取ります。

サーバーコード:

クライアントコード

returns: AttributeError: cannot access 'name'.

私はRPyCサービスを使用しており、Webサイトに準拠していますが、これは機能するはずです。

何か案は?

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

android - リモートマシンから実行するとmonkeyrunnerが機能しないのはなぜですか?

リモート マシンで monkeyrunner スクリプトを実行する必要があります。私はpythonを使用して自動化し、RPyCを使用して他のマシンに接続できるようにしています。すべてがCentOSで実行されています。

以下は、私が使用したコマンドです。

rpycをインポート

サブプロセスのインポート

conn = rpyc.classic.connect("192.XXX.XXX.XXX",XXXXX)

conn.execute (「印刷 'こんにちは'」)

subprocess.Popen("/opt/android-sdk/tools/monkeyrunner -v ALL

/opt/android-sdk/tools/MYSCRIPT.py", shell=True)

これが結果です。

指定されたスクリプト ファイルを開けません

使用法:monkeyrunner [オプション] script_file

-s MonkeyServer IP アドレス

-p MonkeyServer TCP ポート

-v MonkeyServer ログレベル

そして、以下のコマンドを使用すると、マシンでコマンドが実行されていることに気付きました。(例: Popen 内のコマンドは "ls" です。結果として、LOCALHOST の現在のディレクトリにあるファイルとディレクトリのリストが表示されます)。したがって、コマンドは間違っています。

subprocess.Popen("/opt/android-sdk/tools/monkeyrunner -v ALL

/opt/android-sdk/tools/MYSCRIPT.py", shell=True)

だから私はコードをこれに置き換えました

conn.modules.subprocess.Popen("/opt/android-sdk/tools/monkeyrunner -v ALL

/opt/android-sdk/tools/MYSCRIPT.py", shell=True)

そして、このエラーメッセージを教えてください

======= リモート トレースバック ======= トレースバック (最新の呼び出しが最後): ファイル "/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg /rpyc/core/protocol.py"、300 行目、_dispatch_request res = self._HANDLERS[handler](self, *args) ファイル"/usr/lib/python2.4/site-packages/rpyc-3.2.2- py2.4.egg/rpyc/core/protocol.py"、532 行目、_handle_call で self._local_objects[oid](*args, **dict(kwargs)) を返す ファイル "/usr/lib/python2.4/subprocess .py", line 542, in init errread, errwrite) File "/usr/lib/python2.4/subprocess.py", line 975, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory

======= ローカル例外 ======== トレースバック (最新の呼び出しが最後): ファイル ""、1 行目、? ファイル「/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/netref.py」、196 行目、コール return syncreq(_self, consts.HANDLE_CALL, args, kwargs) ファイル "/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/netref.py"、71 行目、syncreq return conn.sync_request( handler, oid, *args) ファイル "/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/protocol.py"、438 行目、sync_request で obj を発生させますOSError: [Errno 2] そのようなファイルまたはディレクトリはありません

管理者アクセス権がないため (リモート マシンのユーザー名とパスワードを入力しなかったため)、ファイルを実行できないのではないかと考えています。

ヘルプ!

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

python - rpyc.Service が 150kB オブジェクトを受信するのに 10 秒かかります (ローカルホスト上、LAN の問題なし)

私は大きな (漬けたときは 150kB) ダミーの辞書を作成し、その上でダミーの関数を実行しています。

同じ関数が rpyc.Service を介して公開されると、クライアントとサーバーが同じホスト上にある場合でも、所要時間は (0.0009 秒ではなく) 10 秒になります (ここでは LAN 遅延の問題はありません)。

私の 150kB オブジェクトがクライアントから同じホスト上のサーバーに通信されるのになぜそんなに時間がかかるのですか?

dummy.dummy()また、入力オブジェクトがまだ「使用可能」でない場合でも関数が呼び出されるのはなぜですか (使用可能である場合、関数で費やされる時間は 2 つのテスト ケースで同じになります)。

以下の私のpython(3.2)コードを参照してください。私は、dummy.dummy(d) で費やされた時間を測定します。

  1. ケース 1: dummy.dummy がクライアントによって呼び出されます。実行時間 = 0.0009
  2. ケース 2: dummy.dummy は rpyc サービスと呼ばれます。実行時間 = 10 秒

mini_service.py

mini_client.py

ダミー.py