UsageΒΆ

Queue Server (bluesky-queueserver) package is automatically installed as a dependency of bluesky-queueserver-api. Bluesky HTTP Server (bluesky-httpserver) package must be installed separately if needed.

Bluesky Queue Server API are expected to work identically when connecting directly to Queue Server (0MQ) or via HTTP Server. Start Queue Server in a separate terminal:

$ start-re-manager

Start HTTP Server in a separate terminal (optional):

$ uvicorn bluesky_httpserver.server:app --host localhost --port 60610

Open IPython to explore the API library. The first step is to import REManagerAPI object. The API library supports synchronous and asynchronous (asyncio) models and for 0MQ and HTTP (REST) protocols:

# 0MQ, synchronous
from bluesky_queueserver_api.zmq import REManagerAPI
# 0MQ, asynchronous
from bluesky_queueserver_api.zmq.aio import REManagerAPI
# HTTP, synchronous
from bluesky_queueserver_api.http import REManagerAPI
# HTTP, asynchronous
from bluesky_queueserver_api.http.aio import REManagerAPI

# Instantiate 'REManagerAPI'. Constructor parameters are different for 0MQ and HTTP API.
RM = REManagerAPI()

Docstrings for each API may be displayed using IPython help() function:

help(RM.status)

The following scripts are expected to run with 0MQ and HTTP versions. Synchronous code:

from bluesky_queueserver_api import BPlan
from bluesky_queueserver_api.zmq import REManagerAPI
# from bluesky_queueserver_api.http import REManagerAPI

RM = REManagerAPI()

item = BPlan("count", ["det1", "det2"], num=10, delay=1)
RM.item_add(item)

RM.environment_open()
RM.wait_for_idle()

RM.queue_start()
RM.wait_for_idle()

status = RM.status()
print(f"status={status}")

RM.environment_close()
RM.wait_for_idle()

RM.close()

Asynchronous code:

import asyncio
from bluesky_queueserver_api import BPlan
from bluesky_queueserver_api.zmq.aio import REManagerAPI
# from bluesky_queueserver_api.http.aio import REManagerAPI

async def run_single_plan():
    RM = REManagerAPI()

    item = BPlan("count", ["det1", "det2"], num=10, delay=1)
    await RM.item_add(item)

    await RM.environment_open()
    await RM.wait_for_idle()

    await RM.queue_start()
    await RM.wait_for_idle()

    status = await RM.status()
    print(f"status={status}")

    await RM.environment_close()
    await RM.wait_for_idle()

    await RM.close()

asyncio.run(run_single_plan())