예제 #1
0
def run_with_reloader(
    main_func,
    extra_files: t.Optional[t.Iterable[str]] = None,
    exclude_patterns: t.Optional[t.Iterable[str]] = None,
    interval: t.Union[int, float] = 1,
    reloader_type: str = "auto",
):
    """Run the given function in an independent Python interpreter."""
    import signal

    signal.signal(signal.SIGTERM, lambda *args: sys.exit(0))
    reloader = reloader_loops[reloader_type](extra_files=extra_files,
                                             exclude_patterns=exclude_patterns,
                                             interval=interval)

    try:
        if os.environ.get("WERKZEUG_RUN_MAIN") == "true":
            ensure_echo_on()
            t = threading.Thread(target=main_func, args=())
            t.setDaemon(True)

            # Enter the reloader to set up initial state, then start
            # the app thread and reloader update loop.
            with reloader:
                t.start()
                reloader.run()
        else:
            sys.exit(reloader.restart_with_reloader())
    except KeyboardInterrupt:
        pass
예제 #2
0
    def run(self):
        try:
            self._gather_threads()
            print(f'Found threads {self._threads}')

            for t in self._threads:
                t.start()

            while not self._shutdown_requested:
                time.sleep(5)

        except Exception as e:
            print(e)