Hi,

i'd like to outline some needs i have for execnet
as well as propossing some rough sketchouts of possible solution


py.execnet between python2 and python3
--------------------------------------

This arises as i want to use anyvc in python3 while the backends are not
portable to python3 yet.

However syntax differences make normal interaction hard
and will most likely perfectly destroy the zero install mechanisms.


installing more complex dependencies in virtualenvs and reusing those
---------------------------------------------------------------------

Syntax differences between python versions as well as complex package
dependencies mandate installing some packages on the remote side.

Tools like virtualenv help with installing those separate from the
normal system as well as with limited rights.

However those tools might need some bootstraping outside of python as
the remote might not be ready to just start up a execnet slave.


a simple remote object protocol via wrappers around channels
------------------------------------------------------------

Inventing own protocols on top of channels if one want's to controll
remote-objects is a fragile task,
helper classes to ease the process are very welcome.


the proposed solutions
-----------------------

1. gw.remote_call(remote_callable, *k, **kw) as alternative to
gw.remote_exec(code)

   * import the callable remote_callable on the remote
   * call remote_callable(channel, *k, **kw)
     where channel is the usual remote_channel

2. a virtualenv based minimal install system

   it needs to do without a usable remote python
   (ie wrong platform, whatever):
   
     * create a virtualenv at a given path
     * install something like a minimal py.execnet slave,
       so the remote side can be started

   * all other install operations should be controllable
     via some kind of remote_exec/remote_call

3. RemoteCaller/RemoteHandler as wrappers around channels that represent
remote objects

   * a experiment in anyvc
   * currently lacks a way to propperly document remote methods
   * RemoteCaller is a base class for wrappers 
     that call to remote objects via a channel

     object.method(*k, **kw) translates to 
        channel.send(('method', k, kw))
        return channel.receive()

     the default handling can be overridden by implementing own methods
     the method self._call_method(name, k, kw) ma

        
   * RemoteHandler is a base class for Channel callbacks 
     once can use as convience wrapper around remote objects
     in order too ease handling messages
     for each incoming method, k, kw tuple 
     it calls the method on self, 
     unpacking the arguments
  

_______________________________________________
py-dev mailing list
py-dev@codespeak.net
http://codespeak.net/mailman/listinfo/py-dev

Reply via email to