How do I copy a python function to a remote machine and then execute it?

The approach you outline is extremely risky unless the remote server is somehow very strongly protected or "extremely sandboxed" (e. G a BSD "jail") -- anybody who can send functions to it would be able to run arbitrary code there Assuming you have an authentication system that you trust entirely, comes the "fragility" problem that you realized -- the function can depend on any globals defined in its module at the moment of execution (which can be different from those you can detect by inspection: determining the set of imported modules, and more generally of globals, at execution time, is a Turing-complete problem) You can deal with the globals problem by serializing the function's globals, as well as the function itself, at the time you send it off for remote execution (whether you serialize all this stuff in readable string form, or otherwise, is a minor issue). But that still leaves you with the issue of imports performed inside the function Unless you're willing to put some limitations on the "remoted" function, such as "no imports inside the function (and functions called from it)", I'm thinking you could have the server override import (the built-in function that is used by all import statements and is designed to be overridden for peculiar needs, such as yours;-) to ask for the extra module from the sending client (of course, that requires that said client also have "server-like" capabilities, in that it must be able to respond to such "module requests" from the server) Can't you impose some restrictions on functions that are remoted, to bring this task back into the domain of sanity...?

The approach you outline is extremely risky unless the remote server is somehow very strongly protected or "extremely sandboxed" (e. G a BSD "jail") -- anybody who can send functions to it would be able to run arbitrary code there. Assuming you have an authentication system that you trust entirely, comes the "fragility" problem that you realized -- the function can depend on any globals defined in its module at the moment of execution (which can be different from those you can detect by inspection: determining the set of imported modules, and more generally of globals, at execution time, is a Turing-complete problem).

You can deal with the globals problem by serializing the function's globals, as well as the function itself, at the time you send it off for remote execution (whether you serialize all this stuff in readable string form, or otherwise, is a minor issue). But that still leaves you with the issue of imports performed inside the function. Unless you're willing to put some limitations on the "remoted" function, such as "no imports inside the function (and functions called from it)", I'm thinking you could have the server override __import__ (the built-in function that is used by all import statements and is designed to be overridden for peculiar needs, such as yours;-) to ask for the extra module from the sending client (of course, that requires that said client also have "server-like" capabilities, in that it must be able to respond to such "module requests" from the server).

Can't you impose some restrictions on functions that are remoted, to bring this task back into the domain of sanity...?

You may interested in the execnet project. Execnet provides carefully tested means to easily interact with Python interpreters across version, platform and network barriers. It has a minimal and fast API targetting the following uses: distribute tasks to local or remote CPUs write and deploy hybrid multi-process applications write scripts to administer a bunch of exec environments codespeak.net/execnet/example/test_info.... I've seen a demo of it.

But never used it myself.

1 for execnet. I've used it to execute some test cases in a distributed fashion and it works great. – Noufal Ibrahim Jun 3 '10 at 5:14.

Its' not clear from your question whether there is some system limitation/requirement for you to solve your problem in this way. If not there may be much easier and quicker ways of doing this using some sort of messaging infrastructure. For example you might consider whether Celery1 1: ask.github.com/celery/getting-started/in... will meet your needs.

I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.

Related Questions