From 82fed172d53da066a135b9abd86f6c7927ebcaf2 Mon Sep 17 00:00:00 2001 From: Vasilis Flouris Date: Wed, 29 Apr 2015 11:41:19 +0100 Subject: [PATCH] fix for leaked file descriptors in daq --- wlauto/core/configuration.py | 2 +- wlauto/instrumentation/daq/__init__.py | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/wlauto/core/configuration.py b/wlauto/core/configuration.py index 66ea706b..46bcc58e 100644 --- a/wlauto/core/configuration.py +++ b/wlauto/core/configuration.py @@ -675,7 +675,7 @@ class RunConfiguration(object): def _finalize_device_config(self): self._load_default_config_if_necessary(self.device) - config = _merge_config_dicts(self._raw_config.get(self.device), + config = _merge_config_dicts(self._raw_config.get(self.device, {}), self._raw_config.get('device_config', {}), list_duplicates='all') self.device_config = config diff --git a/wlauto/instrumentation/daq/__init__.py b/wlauto/instrumentation/daq/__init__.py index a0f5bbd1..09976e34 100644 --- a/wlauto/instrumentation/daq/__init__.py +++ b/wlauto/instrumentation/daq/__init__.py @@ -20,6 +20,7 @@ import os import sys import csv from collections import OrderedDict +from multiprocessing import Process, Queue from wlauto import Instrument, Parameter from wlauto.exceptions import ConfigError, InstrumentError @@ -209,7 +210,11 @@ class Daq(Instrument): def _execute_command(self, command, **kwargs): # pylint: disable=E1101 - result = daq.execute_command(self.server_config, command, **kwargs) + q = Queue() + p = Process(target=_send_daq_command, args=(q, self.server_config, command), kwargs=kwargs) + p.start() + result = q.get() + p.join() if result.status == daq.Status.OK: pass # all good elif result.status == daq.Status.OKISH: @@ -219,3 +224,8 @@ class Daq(Instrument): else: raise InstrumentError('DAQ: Unexpected result: {} - {}'.format(result.status, result.message)) return result.data + + +def _send_daq_command(q, *args, **kwargs): + result = daq.execute_command(*args, **kwargs) + q.put(result)