Two software components: one for updating the current model (the command component), and one for reading the state (the query component).
Note that this is not the GUID of the vdev involved, which is what you might sort of expect given a comment that calls it the 'virtual device ID'.
Even if some of this work is done inefficiently today in any particular implementation, there is a limit to how much it can be improved and sped up.
This leads to a straightforward conclusion: to really get faster, a Python implementation must do less work.
This patterns is used in relatively large scale systems, and also a long-established client-side pattern to separate GUIs and the rest of your code. Named in contrast to REST (Representational State Transfer), the event carries ALL of the data needed about the event, which completely de-couples the target system from the system that originates the event.
Of course, this introduces data replication and eventual consistency (which can be good for some use cases); however, this is a less common pattern since this lack of consistency can actually make the system more complex.