[Ifeffit] How to use Larch as function server
newville at cars.uchicago.edu
Sun Mar 3 08:26:14 CST 2019
On Sat, Mar 2, 2019 at 11:40 PM ASAKURA, Hiroyuki <
asakura at moleng.kyoto-u.ac.jp> wrote:
> Dear all,
> I would like to use Larch as an external function server.
> I'm a Python novice, but if I understand correctly, the present server
> (larch -r) provides access to a Larch process controllable with xmlrpc from
> However, I would like to do something like below to achieve looser
> coupling with my future code (maybe not in python).
> How can I do that?
> I appreciate any suggestion for my first step to go, though I guess it is
> a bit far from the Larch way.
Running Larch in "server mode" is definitely possible but also sort of
advanced programming. I should clarify something: you should start a
server with the `larch_server start`, not `larch -r`. This should be
removed from the `larch` command and fixed in the docs.
Once the server process is running, client processes can send commands to
run and receive data from the larch session running in the server process.
The server process can be on a different machine, but I should admit that
I've only done this in tests. The functions available to the client are
pretty limited (definitely not all larch commands) and meant to be "high
level". They include:
larch send larch commands as strings to
get_data get data encoded in json
get_rawdata get data with json encoding
get_messages, len_messages get messages printed by the server
ls, chdir, cd, cwd setting the working directory for
shutdown, set_keepalive_time shutdown server, delay shutdown due
to no activity
set_client_info, get_client_info set/get information about the client
using this server
There isn't anything as specific as "read_ascii()" function. Instead, you
from xmlrpc.client import ServerProxy
server = ServerProxy("http://127.0.0.1:4966")
# send a string to run as a larch command
server.larch("grp = read_ascii('/path/to/xas/data')")
We could consider adding more exposed functions, but the server has to
register each exposed function (see
), so I would not want to try to expose every function in the Larch API.
The client application can be in any language that supports XML-RPC
communication. Many languages do have an XML-RPC library, though they
might differ in some features like how to unpack data into native
datatypes. For example, a Perl implementation so that Demeter can use a
larch server as its backend is at
If you are interested in doing that for another language let me know if I
can be of any help.
Hope that helps, but if I missed the some part of your question, please let
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Ifeffit