Remote process communication for pymmcore-plus
This package provides experimental support for running pymmcore-plus in a remote process and communicating with it via RPC (currently mediated by Pyro5)
For now, please install from the main branch on github:
pip install git+https://github.com/pymmcore-plus/pymmcore-remote
pymmcore-remote
must be installed on both the server (microscope) side, and the client (controller) side.
On the microscope machine, you must also install micromanager device adapters:
mmcore install
More detail available in the pymmcore-plus documentation
Start a server on the machine with the microscope:
mmcore-remote
You can also specify the port with
--port
and the hostname with--host
. Runmmcore-remote --help
for more options.
Then, on the client side (or in a separate process), connect to the server using
using pymmcore_remote.MMCoreProxy
. MMCorePlusProxy
accepts host
and port
arguments that must match the server (if you override the defaults).
from pymmcore_remote import MMCorePlusProxy
with MMCorePlusProxy() as core:
core.loadSystemConfiguration("path/to/config.cfg")
# continue using core as you would with pymmcore_plus.CMMCorePlus
Commands are serialized and sent to the server, which executes them in the
context of a CMMCorePlus
object. The results are then serialized and sent
back to the client.
See the pymmcore-plus documentation for standard usage of the CMMCorePlus object.
This package is experimental: The goal is for the API to be identical to that of
pymmcore-plus
, but there may be some differences, and various serialization
issues may still be undiscovered. Please open an
issue if you
encounter any problems.
Data is currently shared between processes using python's shared memory module, which is a fast and efficient way to share memory buffers directly. However, this won't work for network access between different machines, so please open an issue to discuss your use case.