def run(self):
        """
        Load handler and collector classes and then start collectors
        """

        ########################################################################
        # Config
        ########################################################################
        self.config = load_config(self.configfile)

        collectors = load_collectors(self.config['diamondCollectorsPath'])

        ########################################################################
        # Signals
        ########################################################################

        signal.signal(signal.SIGHUP, signal_to_exception)

        ########################################################################

        while True:
            try:
                active_children = multiprocessing.active_children()
                running_processes = []
                for process in active_children:
                    running_processes.append(process.name)
                running_processes = set(running_processes)

                ##############################################################
                # Collectors
                ##############################################################

                running_collectors = []
                for collector in self.config['diamondCollectors']:
                    running_collectors.append(collector)
                running_collectors = set(running_collectors)
                self.log.debug("Running collectors: %s" % running_collectors)

                # Collectors that are running but shouldn't be
                for process_name in running_processes - running_collectors:
                    if 'Collector' not in process_name:
                        continue
                    for process in active_children:
                        if process.name == process_name:
                            process.terminate()

                collector_classes = dict(
                    (cls.__name__.split('.')[-1], cls)
                    for cls in collectors.values()
                )

                for process_name in running_collectors - running_processes:
                    # To handle running multiple collectors concurrently, we
                    # split on white space and use the first word as the
                    # collector name to spin
                    collector_name = process_name.split()[0]

                    if 'Collector' not in collector_name:
                        continue

                    if collector_name not in collector_classes:
                        self.log.error('Can not find collector %s',
                                       collector_name)
                        continue

                    # Since collector names can be defined with a space in order to instantiate multiple
                    # instances of the same collector, we want their files
                    # will not have that space and needs to have it replaced with an underscore
                    # instead
                    configfile = '/'.join([
                        self.config['collectorsConfigPath'], process_name]).replace(' ', '_') + '.conf'
                    configfile = load_config(configfile)
                    collector = initialize_collector(
                        collector_classes[collector_name],
                        name=process_name,
                        config=self.config,
                        configfile=configfile,
                        handlers=[])

                    if collector is None:
                        self.log.error('Failed to load collector %s',
                                       process_name)
                        continue

                    # Splay the loads
                    time.sleep(1)

                    process = multiprocessing.Process(
                        name=process_name,
                        target=collector_process,
                        args=(collector, self.log)
                        )
                    process.daemon = True
                    process.start()

                ##############################################################

                time.sleep(1)

            except SIGHUPException:
                self.log.info('Reloading state due to HUP')
                self.config = load_config(self.configfile)
                collectors = load_collectors(
                    self.config['diamondCollectorsPath'])
dataset/ETHPy150Open Yelp/fullerite/src/diamond/server.py/Server.run/original