Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions PYME/Acquire/HDFSpooler.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,8 @@ def __init__(self, filename, frameSource, frameShape, complevel=6, complib='zlib

sp.Spooler.__init__(self, filename, frameSource, **kwargs)

def StopSpool(self):
"""Stop spooling and close file"""
sp.Spooler.StopSpool(self)
def finalise(self):
""" close files"""

self.h5File.flush()
self.h5File.close()
Expand Down
4 changes: 1 addition & 3 deletions PYME/Acquire/HTTPSpooler.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,9 +236,7 @@ def StartSpool(self):
else:
clusterIO.put_file(self.seriesName + '/metadata.json', self.md.to_JSON().encode(), serverfilter=self.clusterFilter)

def StopSpool(self):
sp.Spooler.StopSpool(self)

def finalise(self):
# wait until our input queue is empty rather than immediately stopping saving.
self._stopping=True
logger.debug('Stopping spooling %s' % self.seriesName)
Expand Down
2 changes: 1 addition & 1 deletion PYME/Acquire/SpoolController.py
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@ def StartSpooling(self, fn=None, stack=None, compLevel=None,
self.onSpoolStart.send(self)

#return a function which can be called to indicate if we are done
return lambda : not self.spooler.spoolOn
return lambda : self.spooler.spool_complete

@property
def display_dirname(self):
Expand Down
20 changes: 16 additions & 4 deletions PYME/Acquire/Spooler.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ def __init__(self, filename, frameSource, protocol = p.NullProtocol,
self.spoolOn = False
self.imNum = 0

self.spool_complete = False

self._spooler_uuid = uuid.uuid4()

if not fakeCamCycleTime is None:
Expand All @@ -136,7 +138,7 @@ def StartSpool(self):

self.protocol.Init(self)

self.doStartLog()
self._collect_start_metadata()

self.frameSource.connect(self.OnFrame, dispatch_uid=self._spooler_uuid)
self.spoolOn = True
Expand All @@ -156,7 +158,7 @@ def StopSpool(self):
try:
self.protocol.OnFinish()#this may still cause events
self.FlushBuffer()
self.doStopLog()
self._collect_stop_metadata()
except:
import traceback
traceback.print_exc()
Expand All @@ -172,6 +174,16 @@ def StopSpool(self):

self.onSpoolStop.send(self)

self.finalise() #TODO - should this be before we send the onStopSpool signal?
self.spool_complete = True

def finalise(self):
"""
Over-ride in derived classes to do any spooler specific tidy up - e.g. sending events to server

"""
pass

def abort(self):
"""
Tidy up if something goes horribly wrong. Disconnects frame source and event logger and then calls cleanup()
Expand Down Expand Up @@ -225,7 +237,7 @@ def OnFrame(self, **kwargs):
self.StopSpool()


def doStartLog(self):
def _collect_start_metadata(self):
"""Record pertinant information to metadata at start of acquisition.

Loops through all registered sources of start metadata and adds their entries.
Expand Down Expand Up @@ -253,7 +265,7 @@ def doStartLog(self):
self.md.copyEntriesFrom(mdt)


def doStopLog(self):
def _collect_stop_metadata(self):
"""Record information to metadata at end of acquisition"""
self.md.setEntry('EndTime', time.time())

Expand Down