Run the given function in an independent Python interpreter.
(
main_func: t.Callable[[], None],
extra_files: t.Iterable[str] | None = None,
exclude_patterns: t.Iterable[str] | None = None,
interval: int | float = 1,
reloader_type: str = "auto",
)
| 434 | |
| 435 | |
| 436 | def run_with_reloader( |
| 437 | main_func: t.Callable[[], None], |
| 438 | extra_files: t.Iterable[str] | None = None, |
| 439 | exclude_patterns: t.Iterable[str] | None = None, |
| 440 | interval: int | float = 1, |
| 441 | reloader_type: str = "auto", |
| 442 | ) -> None: |
| 443 | """Run the given function in an independent Python interpreter.""" |
| 444 | import signal |
| 445 | |
| 446 | signal.signal(signal.SIGTERM, lambda *args: sys.exit(0)) |
| 447 | reloader = reloader_loops[reloader_type]( |
| 448 | extra_files=extra_files, exclude_patterns=exclude_patterns, interval=interval |
| 449 | ) |
| 450 | |
| 451 | try: |
| 452 | if os.environ.get("WERKZEUG_RUN_MAIN") == "true": |
| 453 | ensure_echo_on() |
| 454 | t = threading.Thread(target=main_func, args=()) |
| 455 | t.daemon = True |
| 456 | |
| 457 | # Enter the reloader to set up initial state, then start |
| 458 | # the app thread and reloader update loop. |
| 459 | with reloader: |
| 460 | t.start() |
| 461 | reloader.run() |
| 462 | else: |
| 463 | sys.exit(reloader.restart_with_reloader()) |
| 464 | except KeyboardInterrupt: |
| 465 | pass |
no test coverage detected