First steps with bluesky-queueserver#
Starting with the bluesky-queueserver web documentation, make a quick demonstration of what is possible out of the box from the linux command line.
Note
These stream-of-consciousness notes document first steps with bluesky-queueserver. Until these find their way into proper documentation, you might first review documentation from the [APS beamline data pipelines.
One-time setup#
Install redis
package in OS (if not already installed):
$ sudo apt install redis
Create conda environment
$ conda create -y -n qserver -c conda-forge bluesky-queueserver
Start a monitor on a qserver#
In a separate terminal:
conda activate qserver
start-re-manager --zmq-publish-console ON --databroker-config training
Here, the training
catalog is subscribed to the RunEngine, in addition to a 0MQ stream (on port tcp://*:60615).
$ start-re-manager --zmq-publish-console ON --databroker-config training$ start-re-manager --zmq-publish-console ON --databroker-config training INFO:bluesky_queueserver.manager.manager:Starting ZMQ server at 'tcp://*:60615' INFO:bluesky_queueserver.manager.manager:ZMQ control channels: encryption disabled INFO:bluesky_queueserver.manager.manager:Starting RE Manager process INFO:bluesky_queueserver.manager.manager:Loading the lists of allowed plans and devices ... INFO:bluesky_queueserver.manager.manager:Starting ZeroMQ server ... INFO:bluesky_queueserver.manager.manager:ZeroMQ server is waiting on tcp://*:60615
Run plans on the qserver#
In a separate terminal …
Get a queue started:
conda activate qserver
qserver queue start
qserver environment open
Available devices and plans#
Without any local configuration, the bluesky-queueserver
starts with devices from the ophyd simulators and the standard bluesky plans.
These commands show (in JSON) what is available:
qserver allowed devices
qserver allowed plans
Count#
Add a plan to count from two detectors (from the ophyd simulators):
qserver queue add plan '{"name": "count", "args": [["det1", "det2"]], "kwargs": {"num": 10, "delay": 1, "md": {"purpose": "test bluesky-queueserver"}}}'
The monitor shows this response:
INFO:bluesky_queueserver.manager.manager:Adding new item to the queue ...
INFO:bluesky_queueserver.manager.manager:Item added: success=True item_type='plan' name='count' item_uid='33487d7a-d1c8-4639-9a77-eef753a79c8b' qsize=1.
Check the queue of plans to be run:
$ qserver queue get Arguments: ['queue', 'get'] 13:02:44 - MESSAGE: {'items': [{'args': [['det1', 'det2']], 'item_type': 'plan', 'item_uid': '33487d7a-d1c8-4639-9a77-eef753a79c8b', 'kwargs': {'delay': 1, 'md': {'purpose': 'test bluesky-queueserver'}, 'num': 10}, 'name': 'count', 'user': 'qserver-cli', 'user_group': 'primary'}], 'msg': '', 'plan_queue_uid': '40dc1e75-11b8-4331-8a03-24d5dff9f459', 'running_item': {}, 'success': True}
Start running the queue:
qserver queue start
The monitor window shows this response:
INFO:bluesky_queueserver.manager.manager:Starting queue processing ...
INFO:bluesky_queueserver.manager.manager:Processing the next queue item: 1 plans are left in the queue.
INFO:bluesky_queueserver.manager.manager:Starting the plan:
{'args': [['det1', 'det2']],
'item_uid': '33487d7a-d1c8-4639-9a77-eef753a79c8b',
'kwargs': {'delay': 1,
'md': {'purpose': 'test bluesky-queueserver'},
'num': 10},
'meta': {},
'name': 'count',
'user': 'qserver-cli',
'user_group': 'primary'}.
INFO:bluesky_queueserver.manager.worker:Starting execution of a plan ...
INFO:bluesky_queueserver.manager.worker:Starting a plan 'count'.
INFO:bluesky_queueserver.manager.plan_monitoring:New run was open: 'dc48f1b8-6f98-4da4-922e-4daff406849a'
Transient Scan ID: 1 Time: 2021-10-21 13:05:16
Persistent Unique Scan ID: 'dc48f1b8-6f98-4da4-922e-4daff406849a'
New stream: 'primary'
+-----------+------------+------------+------------+
| seq_num | time | det1 | det2 |
+-----------+------------+------------+------------+
| 1 | 13:05:16.8 | 5.000 | 1.765 |
| 2 | 13:05:17.8 | 5.000 | 1.765 |
| 3 | 13:05:18.8 | 5.000 | 1.765 |
| 4 | 13:05:19.8 | 5.000 | 1.765 |
| 5 | 13:05:20.8 | 5.000 | 1.765 |
| 6 | 13:05:21.8 | 5.000 | 1.765 |
| 7 | 13:05:22.8 | 5.000 | 1.765 |
| 8 | 13:05:23.8 | 5.000 | 1.765 |
| 9 | 13:05:24.8 | 5.000 | 1.765 |
| 10 | 13:05:25.8 | 5.000 | 1.765 |
Run was closed: 'dc48f1b8-6f98-4da4-922e-4daff406849a'
+-----------+------------+------------+------------+
generator count ['dc48f1b8'] (scan num: 1)
INFO:bluesky_queueserver.manager.manager:No items are left in the queue.
INFO:bluesky_queueserver.manager.manager:Queue is empty.
Check the queue now:
$ qserver queue get Arguments: ['queue', 'get'] 13:06:11 - MESSAGE: {'items': [], 'msg': '', 'plan_queue_uid': '747545db-a402-4568-9282-74eeb2f1ebf1', 'running_item': {}, 'success': True}
In a new terminal window, check if we can see that run in our databroker:
conda activate qserver
ipython
In [1]: import databroker ...: cat = databroker.catalog["training"] ...: run = cat[-1] ...: run ...: Out[1]: BlueskyRun uid='dc48f1b8-6f98-4da4-922e-4daff406849a' exit_status='success' 2021-10-21 13:05:16.819 -- 2021-10-21 13:05:26.847 Streams: * primary In [2]: run.primary.read() Out[2]:Dimensions: (time: 10) Coordinates: * time (time) float64 1.635e+09 1.635e+09 ... 1.635e+09 1.635e+09 Data variables: det1 (time) float64 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 det2 (time) float64 1.765 1.765 1.765 1.765 ... 1.765 1.765 1.765 1.765
That’s our run!
Scan#
Pick the noisy_det
and motor1
from the ophyd simulators:
qserver queue add plan '{"name": "scan", "args": [["noisy_det"], "motor1", 0, 1, 5 ], "kwargs": {"md": {"purpose": "test bluesky-queueserver"}}}'
Start the queue again:
qserver queue start
Response (in monitor window):
INFO:bluesky_queueserver.manager.manager:Starting queue processing ...
INFO:bluesky_queueserver.manager.manager:Processing the next queue item: 1 plans are left in the queue.
INFO:bluesky_queueserver.manager.manager:Starting the plan:
{'args': [['noisy_det'], 'motor1', 0, 1, 5],
'item_uid': '9c10c3f2-2214-4a70-b3e8-8be4170e68be',
'kwargs': {'md': {'purpose': 'test bluesky-queueserver'}},
'meta': {},
'name': 'scan',
'user': 'qserver-cli',
'user_group': 'primary'}.
INFO:bluesky_queueserver.manager.worker:Starting execution of a plan ...
INFO:bluesky_queueserver.manager.worker:Starting a plan 'scan'.
Transient Scan ID: 2 Time: 2021-10-21 13:17:04
Persistent Unique Scan ID: '0e076f4d-c7c3-4a59-bc7f-8fcc636e5d4b'
INFO:bluesky_queueserver.manager.plan_monitoring:New run was open: '0e076f4d-c7c3-4a59-bc7f-8fcc636e5d4b'
New stream: 'primary'
+-----------+------------+------------+------------+
| seq_num | time | motor1 | noisy_det |
+-----------+------------+------------+------------+
| 1 | 13:17:04.2 | 0.000 | 1.028 |
| 2 | 13:17:04.2 | 0.250 | 0.932 |
Run was closed: '0e076f4d-c7c3-4a59-bc7f-8fcc636e5d4b'
| 3 | 13:17:04.2 | 0.500 | 0.993 |
| 4 | 13:17:04.2 | 0.750 | 0.953 |
| 5 | 13:17:04.2 | 1.000 | 0.975 |
+-----------+------------+------------+------------+
generator scan ['0e076f4d'] (scan num: 2)
INFO:bluesky_queueserver.manager.manager:No items are left in the queue.
INFO:bluesky_queueserver.manager.manager:Queue is empty.
Shutdown the queue server#
qserver manager stop safe on
Note in the monitor window tells the monitor to shutdown:
INFO:bluesky_queueserver.manager.worker:Closing RE Worker environment ...
INFO:bluesky_queueserver.manager.worker:Environment is waiting to be closed ...
INFO:bluesky_queueserver.manager.manager:Waiting for exit confirmation from RE worker ...
INFO:bluesky_queueserver.manager.worker:Run Engine environment was closed successfully
INFO:bluesky_queueserver.manager.manager:Wait for RE Worker process to close (join)
INFO:bluesky_queueserver.manager.start_manager:Joining RE Worker ...
INFO:bluesky_queueserver.manager.manager:RE Manager was stopped by ZMQ command.
INFO:bluesky_queueserver.manager.start_manager:RE Watchdog is stopped
$