class SourceInterface(object):

    def get_data(self):
        raise NotImplementedError('Subclasses should implement this!')


class DestinationInterface(object):

    def put_data(self, data):
        raise NotImplementedError('Subclasses should implement this!')


class FileSource(SourceInterface):

    def __init__(self, filename):
        self.filename = filename

def get_data(self):
    lines = None
with open(self.filename, 'r') as f:
    lines = f.readlines()
if lines:
    with open(self.filename, 'w') as f:
        if lines[1:]:
            f.writelines(lines[1:])
return lines[0]


class FileDestination(DestinationInterface):

    def __init__(self, filename):
        self.filename = filename

def put_data(self, data):
    print('put data', data)
with open(self.filename, 'a+') as f:
    f.write(data)


class DataProcessor(object):
    sources_list = []
destinitions_list = []

def register_source(self, source):
    self.sources_list.append(source)

def register_destinition(self, destinition):
    self.destinitions_list.append(destinition)

def process(self):
    for source in self.sources_list:
        data = source.get_data()
if data:
    for destinition in self.destinitions_list:
        destinition.put_data(data)
if __name__ == '__main__':
    processor = DataProcessor()
processor.register_source(FileSource('/tmp/source1.txt'))
processor.register_source(FileSource('/tmp/source2.txt'))
processor.register_destinition(FileDestination('/tmp/destinition1.txt'))
processor.register_destinition(FileDestination('/tmp/destinition2.txt'))
processor.process()
Save data into two separate Parse apps