Tango event subscription modes
This work is part of Taurus Performance Optimization (TPO) project. It adapts taurus to the new event subscription modes that Tango introduces from 10.1.0. The two pillars here are:
Selecting the event subscription mode (
EventSubMode).A lightweight first read to initialize attribute values when needed.
For background on Tango events and PyTango API see the official docs:
Tango Events and PyTango DeviceProxy API. PyTango exposes the
EventSubMode enum and adds EventReason in the EventData
structure (see documentation in PyTango client API).
EventSubMode in Taurus
Taurus supports all event subscription modes that Tango >= 10.1.0 provides. Taurus functionality should not change between modes but depending on the nature of the attributes and devices, the performance when starting applications may be affected.
When available, Taurus uses AsyncRead as default EventSubMode. Typically,
the mode should not be changed as AsyncRead resulted the best compromise between
compatibility, simplicity and performance but Taurus offers the possibility to
change modes via via Taurus custom settings or
Command-Line Interface.
If you experience problems when starting applications, specially with values
initialization, the mode can be changed to SyncRead to recover the previous
Taurus (< 5.4) default behaviour.
The following table (adapted from PyTango EventSubMode) summarizes the available event subscription modes:
EventSubMode |
Tries subscription before returning |
Raises on subscription failure |
Retries automatically |
Reads entity |
First callback |
|---|---|---|---|---|---|
SyncRead |
Yes |
Yes |
No |
Yes, during subscription |
Immediately, with data |
AsyncRead |
No |
No |
Yes |
Yes, after subscription |
After read, with data |
Sync |
Yes |
Yes |
No |
No |
Not on subscription. Only on next event |
Async |
No |
No |
Yes |
No |
After subscription, no data |
Stateless |
Yes |
No |
Yes |
Yes, during subscription |
Immediately, with data |
First Read (client-side initialization)
Taurus now provides a one-shot read used when the chosen mode does not
perform an initial read by itself (Sync and Async). This first read
is performed asynchronously in a dedicated thread that finishes when
all attributes have been initialized.
This feature ensures that the attribute has a value cached right after subscription setup, delegating to Taurus the responsibility for providing the initial attribute value.
API involved in Taurus:
Factory helper to register a first-time read for a given attribute.
Attribute-side helper that delegates to the factory during initialization.
Changing the default mode via Custom Settings
You can set the default EventSubMode machine-wide using Taurus Custom Settings. See the official page: Taurus custom settings.
Command-Line Interface (CLI)
Taurus provides two CLI switches to control Tango event subscriptions at launch:
--disable-tango-event-subscriptionDisables Tango change-event subscriptions and forces polling.--tango-event-sub-mode {Sync,SyncRead,Async,AsyncRead}Selects the subscription mode for change events for this run.
Precedence:
If events are disabled via CLI, polling is used regardless of of the selected mode.
Otherwise, the mode is taken from CLI; if not set, from custom settings; otherwise Taurus uses the project default (
AsyncReadin this branch).