Skip to content

Commit c3d4546

Browse files
committed
Open and close h5 database on all uses.
1 parent cbd4eb1 commit c3d4546

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

partfinder/analysis.py

+2
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ def run_task(self, model_name, sub):
238238
# Not entirely sure that WE NEED to block here, but it is safer to do
239239
# It shouldn't hold things up toooo long...
240240
self.lock.acquire()
241+
log.debug("Getting lock")
241242
try:
242243
if fabricate:
243244
sub.fabricate_model_result(the_config, model_name)
@@ -248,6 +249,7 @@ def run_task(self, model_name, sub):
248249
sub.finalise(the_config)
249250
finally:
250251
self.lock.release()
252+
log.debug("Release lock")
251253

252254
def add_tasks_for_sub(self, tasks, sub):
253255
for m in sub.models_to_process:

partfinder/database.py

+18-3
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,10 @@ def __init__(self, cfg):
121121
self.cfg = cfg
122122
self.path = os.path.join(self.cfg.subsets_path, 'data.db')
123123
self.results = None
124+
self.h5 = None
125+
126+
def _open(self):
127+
assert self.h5 is None
124128
if os.path.exists(self.path):
125129
try:
126130
self.h5 = tables.open_file(self.path, 'a')
@@ -143,26 +147,37 @@ def __init__(self, cfg):
143147
f = tables.Filters(complib='blosc', complevel=5)
144148
self.h5 = tables.open_file(self.path, 'w', filters=f)
145149
self.results = self.h5.create_table(
146-
'/', 'results', cfg.data_layout.data_type)
150+
'/', 'results', self.cfg.data_layout.data_type)
147151
self.results.cols.subset_id.create_csindex()
148152

149153
assert isinstance(self.results, tables.Table)
150154
assert self.results.indexed
151155

152156
def get_results_for_subset(self, subset):
157+
self._open()
153158
conditions = {'current_id': subset.subset_id}
154159
matching = self.results.read_where(
155160
'subset_id == current_id', conditions)
161+
self.close()
156162
return matching
157163

158164
def is_empty(self):
159-
return self.results.nrows == 0
165+
self._open()
166+
res = self.results.nrows == 0
167+
self.close()
168+
return res
160169

161170
def save_result(self, subset, n):
171+
log.debug("begin saving result")
172+
self._open()
162173
# We have to take a slice here, as pytables can't handle single
163174
# elements
164175
self.results.append(subset.result_array[n:n+1])
165176
self.cfg.database.results.flush()
177+
self.close()
178+
log.debug("done saving result")
166179

167180
def close(self):
168-
self.h5.close()
181+
if self.h5 is not None:
182+
self.h5.close()
183+
self.h5 = None

0 commit comments

Comments
 (0)