newmd5 = watched_file.calcmd5() if watched_file.lastmd5 != newmd5: self.file_modified_trigger(watched_file.filepath) watched_file.set_lastmd5(newmd5) def start(self): self.thread.start() def file_modified_trigger(self, filepath): for handler in self.file_event_handlers: handler.on_modified(filepath) observer = PollingFileObserver() update_shares_event_handler = UpdateSharesEventHandler() observer.add_file_event_handler(update_shares_event_handler) observer.add_watched_file(shares_file_path) observer.add_watched_file(shares_data_file_path) observer.start() Handler = MyRequestHandler SocketServer.TCPServer.allow_reuse_address = True httpd = SocketServer.TCPServer(("", port), Handler) def signal_handler(signal, frame): # close the socket here httpd.server_close() observer.stop() sys.exit(0)