forked from M-Labs/artiq
master/worker_db: add pause_devices and resume_devices
This commit is contained in:
parent
0cca2bbef6
commit
3c70bc40a4
|
@ -113,7 +113,9 @@ def _create_device(desc, device_mgr):
|
||||||
class DeviceManager:
|
class DeviceManager:
|
||||||
"""Handles creation and destruction of local device drivers and controller
|
"""Handles creation and destruction of local device drivers and controller
|
||||||
RPC clients."""
|
RPC clients."""
|
||||||
def __init__(self, ddb, virtual_devices=dict()):
|
def __init__(self, ddb, virtual_devices=None):
|
||||||
|
if virtual_devices is None:
|
||||||
|
virtual_devices = dict()
|
||||||
self.ddb = ddb
|
self.ddb = ddb
|
||||||
self.virtual_devices = virtual_devices
|
self.virtual_devices = virtual_devices
|
||||||
self.active_devices = OrderedDict()
|
self.active_devices = OrderedDict()
|
||||||
|
@ -141,6 +143,28 @@ class DeviceManager:
|
||||||
self.active_devices[name] = dev
|
self.active_devices[name] = dev
|
||||||
return dev
|
return dev
|
||||||
|
|
||||||
|
def pause_devices(self):
|
||||||
|
"""Pauses all active devices, in the opposite order as they were
|
||||||
|
requested."""
|
||||||
|
for dev in reversed(list(self.active_devices.values())):
|
||||||
|
if hasattr(dev.__class__, "pause"):
|
||||||
|
try:
|
||||||
|
dev.pause()
|
||||||
|
except:
|
||||||
|
logger.warning("Exception when pausing device %r", dev,
|
||||||
|
exc_info=True)
|
||||||
|
|
||||||
|
def resume_devices(self):
|
||||||
|
"""Resumes all active devices, in the same order as they were
|
||||||
|
requested."""
|
||||||
|
for dev in self.active_devices.values():
|
||||||
|
if hasattr(dev.__class__, "resume"):
|
||||||
|
try:
|
||||||
|
dev.resume()
|
||||||
|
except:
|
||||||
|
logger.warning("Exception when resuming device %r", dev,
|
||||||
|
exc_info=True)
|
||||||
|
|
||||||
def close_devices(self):
|
def close_devices(self):
|
||||||
"""Closes all active devices, in the opposite order as they were
|
"""Closes all active devices, in the opposite order as they were
|
||||||
requested."""
|
requested."""
|
||||||
|
@ -148,10 +172,11 @@ class DeviceManager:
|
||||||
try:
|
try:
|
||||||
if isinstance(dev, (Client, BestEffortClient)):
|
if isinstance(dev, (Client, BestEffortClient)):
|
||||||
dev.close_rpc()
|
dev.close_rpc()
|
||||||
elif hasattr(dev, "close"):
|
elif hasattr(dev.__class__, "close"):
|
||||||
dev.close()
|
dev.close()
|
||||||
except Exception as e:
|
except:
|
||||||
logger.warning("Exception %r when closing device %r", e, dev)
|
logger.warning("Exception when closing device %r", dev,
|
||||||
|
exc_info=True)
|
||||||
self.active_devices.clear()
|
self.active_devices.clear()
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue