def run(server_only=False): # set up logging: logging.basicConfig( filename=LOG_FILE_NAME, format='%(asctime)s - %(levelname)s:%(message)s', level=logging.DEBUG ) try: import setproctitle setproctitle.setproctitle('anagramatron') except ImportError: print("missing module: setproctitle") pass if server_only: hit_server.start_hit_server() else: hitserver = multiprocessing.Process(target=hit_server.start_hit_server) hitserver.daemon = True hitserver.start() anagram_finder = AnagramFinder() stats.clear_stats() while 1: print('top of run loop') logging.debug('top of run loop') try: print('starting stream handler') stream_handler = StreamHandler() stream_handler.start() for processed_tweet in stream_handler: anagram_finder.handle_input(processed_tweet) stats.update_console() except NeedsMaintenance: logging.debug('caught NeedsMaintenance exception') print('performing maintenance') stream_handler.close() anagram_finder.perform_maintenance() except KeyboardInterrupt: stream_handler.close() anagram_finder.close() return 0 except Exception as err: logging.error(sys.exc_info()) stream_handler.close() anagram_finder.close() TwitterHandler().send_message(str(err) + "\n" + datetime.today().isoformat()) raise