From 75c0b089e09b21e6de0c791cf214121aeffce146 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleix=20Conchillo=20Flaqu=C3=A9?= Date: Mon, 22 Sep 2025 22:38:12 -0700 Subject: [PATCH] PipelineRunner: use signal.signal() on Windows --- CHANGELOG.md | 3 +++ src/pipecat/pipeline/runner.py | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41d905d43..ee54ce7ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -79,6 +79,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Fixed a `PipelineRunner` issue on Windows where setting up SIGINT and SIGTERM + was raising an exception. + - Fixed an issue where multiple handlers for an event would not run in parallel. - Fixed `DailyTransport.sip_call_transfer()` to automatically use the session diff --git a/src/pipecat/pipeline/runner.py b/src/pipecat/pipeline/runner.py index e8c325521..9d82fcd88 100644 --- a/src/pipecat/pipeline/runner.py +++ b/src/pipecat/pipeline/runner.py @@ -106,13 +106,21 @@ class PipelineRunner(BaseObject): def _setup_sigint(self): """Set up signal handlers for graceful shutdown.""" - loop = asyncio.get_running_loop() - loop.add_signal_handler(signal.SIGINT, lambda *args: self._sig_handler()) + try: + loop = asyncio.get_running_loop() + loop.add_signal_handler(signal.SIGINT, lambda *args: self._sig_handler()) + except NotImplementedError: + # Windows fallback + signal.signal(signal.SIGINT, lambda s, f: self._sig_handler()) def _setup_sigterm(self): """Set up signal handlers for graceful shutdown.""" - loop = asyncio.get_running_loop() - loop.add_signal_handler(signal.SIGTERM, lambda *args: self._sig_handler()) + try: + loop = asyncio.get_running_loop() + loop.add_signal_handler(signal.SIGTERM, lambda *args: self._sig_handler()) + except NotImplementedError: + # Windows fallback + signal.signal(signal.SIGTERM, lambda s, f: self._sig_handler()) def _sig_handler(self): """Handle interrupt signals by cancelling all tasks."""