Public Access
improved performance a lot, incremental writing of HDF5
This commit is contained in:
@@ -506,9 +506,9 @@ class DamarisGUI:
|
||||
print(f"DEBUG: start_experiment called at {overall_start}")
|
||||
|
||||
# something running?
|
||||
if self.si is not None:
|
||||
print("Last Experiment is not clearly stopped!")
|
||||
self.si = None
|
||||
if self.si is not None or self.state != DamarisGUI.Edit_State:
|
||||
print("Experiment is still running or cleaning up!")
|
||||
return
|
||||
|
||||
# get config values:
|
||||
config_start = time.time()
|
||||
@@ -744,6 +744,9 @@ class DamarisGUI:
|
||||
"""
|
||||
periodically look at running threads
|
||||
"""
|
||||
if self.si is None:
|
||||
return False
|
||||
|
||||
# look at components and update them
|
||||
# test whether backend and scripts are done
|
||||
r = self.si.data.get( "__recentresult", -1 ) + 1
|
||||
@@ -888,6 +891,11 @@ class DamarisGUI:
|
||||
dump_size = os.stat( self.dump_filename ).st_size / 1e6
|
||||
print("done (%.1f s, %.1f MB)" % (time.time( ) - self.dump_start_time, dump_size))
|
||||
|
||||
# keep data to display but throw away everything else
|
||||
self.si = None
|
||||
# delete lock file so that other experiment can start
|
||||
self.lockfile.del_experiment(self.id)
|
||||
|
||||
# now everything is stopped
|
||||
self.state = DamarisGUI.Edit_State
|
||||
gdk.threads_enter( )
|
||||
@@ -896,16 +904,12 @@ class DamarisGUI:
|
||||
self.toolbar_stop_button.set_sensitive( False )
|
||||
self.toolbar_pause_button.set_sensitive( False )
|
||||
gdk.threads_leave( )
|
||||
|
||||
# keep data to display but throw away everything else
|
||||
self.si = None
|
||||
# delete lock file so that other experiment can start
|
||||
self.lockfile.del_experiment(self.id)
|
||||
return False
|
||||
|
||||
# dump states?
|
||||
dump_interval = self.dump_timeinterval if self.dump_timeinterval > 0 else 2.0
|
||||
if self.dump_thread is None and self.dump_filename != "" and \
|
||||
self.dump_timeinterval != 0 and self.last_dumped + self.dump_timeinterval < time.time( ):
|
||||
self.last_dumped + dump_interval < time.time( ):
|
||||
print("dumping data pool")
|
||||
self.dump_start_time = time.time( )
|
||||
self.dump_dots = 0
|
||||
@@ -1062,19 +1066,25 @@ class DamarisGUI:
|
||||
dump_file.disable_undo( )
|
||||
|
||||
# save the data!
|
||||
self.data.write_hdf5( dump_file, where="/", name="data_pool",
|
||||
complib=self.dump_complib, complevel=self.dump_complevel,
|
||||
incremental=not init, write_interval=self.dump_timeinterval )
|
||||
if self.data is not None:
|
||||
self.data.write_hdf5( dump_file, where="/", name="data_pool",
|
||||
complib=self.dump_complib, complevel=self.dump_complevel,
|
||||
incremental=not init, write_interval=self.dump_timeinterval )
|
||||
|
||||
# Re-enable run button if this was called from save thread
|
||||
if not init and threading.current_thread().name == "dump states":
|
||||
gdk.threads_enter()
|
||||
self.toolbar_run_button.set_sensitive(True)
|
||||
gdk.threads_leave()
|
||||
# NO: this is dangerous as it allows starting a new experiment before cleanup is finished.
|
||||
# it will be re-enabled in observe_running_experiment after joining this thread.
|
||||
# if not init and threading.current_thread().name == "dump states":
|
||||
# gdk.threads_enter()
|
||||
# self.toolbar_run_button.set_sensitive(True)
|
||||
# gdk.threads_leave()
|
||||
|
||||
# now save additional information
|
||||
e = self.si.data.get( "__recentexperiment", -1 ) + 1
|
||||
r = self.si.data.get( "__recentresult", -1 ) + 1
|
||||
e = 0
|
||||
r = 0
|
||||
if self.si is not None:
|
||||
e = self.si.data.get( "__recentexperiment", -1 ) + 1
|
||||
r = self.si.data.get( "__recentresult", -1 ) + 1
|
||||
timeline_table = dump_file.root.timeline
|
||||
timeline_row = timeline_table.row
|
||||
timeline_row[ "time" ] = time.strftime( "%Y%m%d %H:%M:%S" )
|
||||
|
||||
Reference in New Issue
Block a user