waverunner

Waverunner is a symmetrical client/server RPC tool

securely advertises and executes arbitrary remote python modules

server-side code:

create a script (let’s call it batch-script.py) that looks like this:

import numpy
import fancyInstrumentControl
from waverunner import SecureMethod

@SecureMethod
def get_measurement(stimulus):
    return fancyInstrumentControl.pass(stimulus)

then run waverunner:

$ python -m waverunner \
     --srv-path /path/to/batch-script.py \
     --notify 123.345.543.2
     --password mybestfriendsgirlfriendisamediocresong
     
found batch-script.get_measurement
serving at 142.555.432.1
sending notifications to 123.345.543.2

waverunner will now serve ‘batch-script.get_measurement()’ and advertise to any waverunner that might be running at 123.345.543.2

client-side code:


from waverunner import Server

server = Server(
            password='mybestfriendsgirlfriendisamediocresong',
            user_ips='142.555.432.1')

request = (
    'batch-script.get_measurement',
    np.stack([np.random.randn(100) for i in range(100)]),
)
    
result = server.external_request('http://142.555.432.1', *request)
print(result)
Assistant Professor of Electrical and Computer Engineering in the Department of Electrical and Computer Engineering at the University of Mississippi

My research interests include high-level analog synthesis, nonlinear network dynamics, and design verifiability.