[svn r37643] stroke the historical notes, and streamlined
various parts of execnet documentation, added some api references. --HG-- branch : trunk
This commit is contained in:
parent
6aaca64290
commit
97346c8a5a
|
@ -4,7 +4,7 @@ The py.execnet library
|
||||||
.. contents::
|
.. contents::
|
||||||
.. sectnum::
|
.. sectnum::
|
||||||
|
|
||||||
Execnet deals with letting your python programs execute and
|
``py.execnet`` deals with letting your python programs execute and
|
||||||
communicate across process and computer barriers. At the
|
communicate across process and computer barriers. At the
|
||||||
core it is a very simple and powerful mechanism: executing
|
core it is a very simple and powerful mechanism: executing
|
||||||
source code at "the other side" and communicating with
|
source code at "the other side" and communicating with
|
||||||
|
@ -15,35 +15,18 @@ in some ways. So some of the described features are not
|
||||||
there yet. You may refer to the `py API`_ reference for
|
there yet. You may refer to the `py API`_ reference for
|
||||||
further information.
|
further information.
|
||||||
|
|
||||||
The "shpy" way, historical remarks
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
Some of you may have seen the pygame-based editor **shpy**
|
|
||||||
that Armin Rigo, Holger Krekel and Michael Hudson demonstrated
|
|
||||||
at EuroPython 2004 during the lightning talks. It is a
|
|
||||||
multiline interactive python environment which allows multiple
|
|
||||||
remote users to have their own cursors and shared interaction
|
|
||||||
with the graphical shell which can execute python code, of
|
|
||||||
course.
|
|
||||||
|
|
||||||
**py.execnet** extracts and refines the basic mechanism that
|
|
||||||
was originally developed from the one-week hack that is the
|
|
||||||
current **shpy**. No, the latter is not released but hopefully
|
|
||||||
Armin, Holger and others get to do a second one-week sprint at
|
|
||||||
some point to be able to release it. If you are interested
|
|
||||||
drop them a note. This is real fun if you are willing to
|
|
||||||
bend your mind a bit.
|
|
||||||
|
|
||||||
A new view on distributed execution
|
A new view on distributed execution
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
**py.execnet** takes the view of **asynchronously executing
|
**py.execnet** lets you asynchronously execute source code on
|
||||||
client-provided code fragments** to help address a core
|
remote places. The sending and receiving side communicate via
|
||||||
problem of distributed programs. A core feature of
|
Channels that transport marshallable objects. A core feature
|
||||||
**py.execnet** is that **the communication protocols can be
|
of **py.execnet** is that **the communication protocols can be
|
||||||
defined by the client side**. Usually, with server/client
|
completely defined by the client side**. Usually, with
|
||||||
apps and especially RMI systems you often have to upgrade your
|
server/client apps and especially Remote Method Based (RMI)
|
||||||
server if you upgrade your client.
|
approaches you have to define interfaces and have to
|
||||||
|
upgrade your server and client and restart both.
|
||||||
|
|
||||||
What about Security? Are you completely nuts?
|
What about Security? Are you completely nuts?
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
|
@ -68,24 +51,29 @@ With ''py.execnet'' you get the means
|
||||||
High Level Interface: **remote_exec**
|
High Level Interface: **remote_exec**
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
|
||||||
These gateways offer one main high level interface::
|
All gateways offer one main high level interface,
|
||||||
|
e.g.
|
||||||
|
|
||||||
def remote_exec(source):
|
def remote_exec(source):
|
||||||
"""return channel object for communicating with the asynchronously
|
"""return channel object for communicating with the asynchronously
|
||||||
executing 'source' code which will have a corresponding 'channel'
|
executing 'source' code which will have a corresponding 'channel'
|
||||||
object in its executing namespace."""
|
object in its executing namespace."""
|
||||||
|
|
||||||
The most important property of execnet gateways is that the
|
With `remote_exec` you send source code to the other
|
||||||
protocol they speak with each other ``is determined by the
|
side and get both a local and a remote Channel_ object,
|
||||||
client side``. If you open a gateway on some server in order
|
which you can use to have the local and remote site
|
||||||
to coordinate with some other programs you determine your
|
communicate data in a structured way.
|
||||||
communication protocol. Multiple clients can run their own
|
|
||||||
gateway versions in the same remote process (e.g. connecting
|
This approach implements the idea to ``determining
|
||||||
through their version of a SocketGateway).
|
protocol and remote code from the client/local side``.
|
||||||
|
This makes distributing a program run in an ad-hoc
|
||||||
|
manner (using e.g. :api:`py.path.SshGateway`) very easy.
|
||||||
|
|
||||||
You should not need to maintain software on the other sides
|
You should not need to maintain software on the other sides
|
||||||
you are running your code at.
|
you are running your code at, other than the Python
|
||||||
|
executable itself.
|
||||||
|
|
||||||
|
.. _`Channel`:
|
||||||
.. _`channel-api`:
|
.. _`channel-api`:
|
||||||
.. _`exchange data`:
|
.. _`exchange data`:
|
||||||
|
|
||||||
|
@ -128,7 +116,8 @@ Here is the current interface::
|
||||||
A remote side blocking on receive() on this channel
|
A remote side blocking on receive() on this channel
|
||||||
will get woken up and see an EOFError exception.
|
will get woken up and see an EOFError exception.
|
||||||
|
|
||||||
A simple and useful Example for Channels
|
|
||||||
|
The complete Fileserver example
|
||||||
........................................
|
........................................
|
||||||
|
|
||||||
problem: retrieving contents of remote files::
|
problem: retrieving contents of remote files::
|
||||||
|
@ -155,6 +144,7 @@ problem: retrieving contents of remote files::
|
||||||
# later you can exit / close down the gateway
|
# later you can exit / close down the gateway
|
||||||
contentgateway.exit()
|
contentgateway.exit()
|
||||||
|
|
||||||
|
|
||||||
A more complicated "nested" Gateway Example
|
A more complicated "nested" Gateway Example
|
||||||
...........................................
|
...........................................
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue