Я пытаюсь создать конструкцию в Python 3, которая позволит мне легко выполнять функцию на удаленной машине.
Предполагая, что у меня уже есть tcp-сервер python, который будет запускать функции, которые он получает, работая на удаленном сервере, я сейчас использую декоратор, такой как
@execute_on(address, port)
Это создаст необходимый контекст, необходимый для выполнения функции, которую он украшает, а затем отправит функцию и контекст на tcp-сервер на удаленном компьютере, который затем выполняет его. Во-первых, это несколько вменяемое? А если нет, не могли бы вы порекомендовать лучший подход? Я немного погуглил, но не нашел ничего, что отвечало бы этим потребностям.
У меня есть быстрая и грязная реализация для tcp-сервера и клиента, поэтому я уверен, что это сработает Я могу получить строковое представление функции (например, func), передаваемой декоратору с помощью
import inspect
string = inspect.getsource(func)
, который затем можно отправить на сервер, где он может быть выполнен. Проблема в том, как получить всю контекстную информацию, необходимую для выполнения функции? Например, если func определен следующим образом,
import MyModule
def func():
result = MyModule.my_func()
MyModule должен быть доступен для функции либо в глобальном контексте, либо в локальном контексте функции на удаленном сервере. В этом случае это относительно тривиально, но это может быть намного сложнее в зависимости от того, когда и как используются операторы импорта. Есть ли простой и элегантный способ сделать это в Python? Лучшее, что я придумал на данный момент, - это использование библиотеки ast для извлечения всех операторов импорта, использование модуля inspect для получения строковых представлений этих модулей, а затем восстановление всего контекста на удаленном сервере. Не особенно элегантно, и я вижу много места для ошибок.
Спасибо за ваше время