In [1]:
from Queue import Queue
import threading
import time

In [2]:
Queue?

In [3]:
class Source(threading.Thread):
    def __init__(self):
        super(Source, self).__init__()
        self.queue = Queue(2)
        self._stop = threading.Event()
        
    def run(self):
        """Puts training data into a Queue"""
        self._stop.unSet()
        while not self._stop.isSet():
            self.queue.put(self._gen_data())
            
    def stop(self):
        self.queue.get()
        self._stop.set()
        
    def validation_data(self):
        return self._get_data(validation=True)

    def _gen_data(self, validation=False):
        raise NotImplementedError()

    def input_shape(self):
        raise NotImplementedError()
        
    def output_shape(self):
        raise NotImplementedError()
        
class NILMSource(Source):
    SEQ_LENGTH = 14400
    
    
    def _gen_data(self, validation=False):
        data = None, None # just for testing
        return data
    
    

class Net(object):
    def __init__(self, source):
        self.source = source
        self.input_shape = source.input_shape()
        self.output_shape = source.output_shape()
        
    def train(self, n_iterations=100):
        self.source.run()
        try:
            for i in range(n_iterations):
                print self.source.queue.get()
        except KeyboardInterrupt as e:
            print(e)
        finally:
            self.source.stop()
            self.source.join()

In [4]:
src = Source()
src.start()

In [5]:
sink()


1422986310.59
1422986310.59
1422986311.54
1422986312.54
1422986313.54

In [6]:
src.stop()
src.join()

In [3]:
q.put?

In [3]:
q.

In [ ]: