Source code for pymanip.interfaces.aiovisa

"""Asynchronous extension of :class:`fluidlab.interfaces.VISAInterface` (:mod:`pymanip.interfaces.aiovisa`)
===========================================================================================================

This module defines :class:`AsyncVISAInterface` as a subclass of :class:`fluidlab.interfaces.visa_inter.VISAInterface` and
:class:`pymanip.interface.aiointer.AsyncQueryInterface`.

.. autoclass:: AsyncVISAInterface
   :members:
   :private-members:

"""

import asyncio
import fluidlab.interfaces.visa_inter as fl_visa
from pymanip.interfaces.aiointer import AsyncQueryInterface

VISALock = asyncio.Lock()


[docs]class AsyncVISAInterface(fl_visa.VISAInterface, AsyncQueryInterface): """This class is an asynchronous extension of :class:`fluidlab.interfaces.visa_inter.VISAInterface`. The parameters are the same as those of the :class:`fluidlab.interfaces.visa_inter.VISAInterface` class. """ def __init__(self, resource_name, backend=None): """Constructor method """ super().__init__(resource_name, backend) # Override interface lock with global VISA lock because VISA library is not # thread-safe so we don't want concurrent calls to VISA lib. self.lock = VISALock
[docs] async def await_for_srq(self, timeout=None): """This co-routine method acquires the interface lock and run wait_for_srq in an executor. """ async with self.lock: await self.loop.run_in_executor(None, self.wait_for_srq, timeout)