リモート マシンで関数を簡単に実行できるようにするコンストラクトを Python 3 で作成しようとしています。リモートサーバーで実行されている、受信した関数を実行するpython tcpサーバーが既にあると仮定すると、現在、次のようなデコレーターの使用を検討しています
@execute_on(address, port)
これにより、装飾している関数を実行するために必要なコンテキストが作成され、関数とコンテキストがリモート マシンの tcp サーバーに送信されて実行されます。まず、これはやや正気ですか?そうでない場合は、より良いアプローチをお勧めできますか? グーグルで調べましたが、これらのニーズを満たすものは見つかりませんでした。
私は tcp サーバーとクライアントのための迅速で汚い実装を持っているので、それがうまくいくことはかなり確信しています。デコレータに渡される関数 (func など) の文字列表現を取得できます。
import inspect
string = inspect.getsource(func)
その後、サーバーに送信して実行することができます。問題は、関数の実行に必要なすべてのコンテキスト情報を取得するにはどうすればよいかということです。たとえば、 func が次のように定義されている場合、
import MyModule
def func():
result = MyModule.my_func()
MyModule は、リモート サーバー上のグローバル コンテキストまたは funcs ローカル コンテキストのいずれかで func を使用できる必要があります。この場合、それは比較的些細なことですが、import ステートメントがいつ、どのように使用されるかによって、非常に複雑になる可能性があります。Pythonでこれを行う簡単でエレガントな方法はありますか? 現時点で私が思いついた最善の方法は、ast ライブラリを使用してすべてのインポート ステートメントを引き出し、inspect モジュールを使用してそれらのモジュールの文字列表現を取得し、リモート サーバー上でコンテキスト全体を再構築することです。特にエレガントではなく、エラーの余地がたくさんあります。
御時間ありがとうございます