forked from pdbpp/pdbpp
-
Notifications
You must be signed in to change notification settings - Fork 5
Open
Labels
bugSomething isn't workingSomething isn't working
Description
I'm getting an error ValueError: signal only works in main thread of the main interpreter when using breakpoint() inside fastapi route handler when pdbpp is installed.
To reproduce:
uv init -p 3.13.5 --app test-pdbpp
cd test-pdbpp/
uv add fastapi[standard] pdbpp
# replace main.py contents
uv run fastapi dev
curl 127.0.0.1:8000The main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
breakpoint()
return {"Hello": "World"}Full traceback
[3] > /app/test-pdbpp/main.py(8)read_root()
-> breakpoint()
INFO 127.0.0.1:47460 - "GET / HTTP/1.1" 500
ERROR Exception in ASGI application
Traceback (most recent call last):
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
result = await app( # type: ignore[func-returns-value]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
self.scope, self.receive, self.send
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
return await self.app(scope, receive, send)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/fastapi/applications.py", line 1054, in __call__
await super().__call__(scope, receive, send)
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/applications.py", line 113, in __call__
await self.middleware_stack(scope, receive, send)
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/middleware/errors.py", line 186, in __call__
raise exc
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/middleware/errors.py", line 164, in __call__
await self.app(scope, receive, _send)
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
raise exc
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/routing.py", line 716, in __call__
await self.middleware_stack(scope, receive, send)
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/routing.py", line 736, in app
await route.handle(scope, receive, send)
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/routing.py", line 290, in handle
await self.app(scope, receive, send)
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/routing.py", line 78, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
raise exc
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/routing.py", line 75, in app
response = await f(request)
^^^^^^^^^^^^^^^^
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/fastapi/routing.py", line 302, in app
raw_response = await run_endpoint_function(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<3 lines>...
)
^
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/fastapi/routing.py", line 215, in run_endpoint_function
return await run_in_threadpool(dependant.call, **values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/starlette/concurrency.py", line 38, in run_in_threadpool
return await anyio.to_thread.run_sync(func)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/anyio/to_thread.py", line 56, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
func, args, abandon_on_cancel=abandon_on_cancel, limiter=limiter
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 2476, in run_sync_in_worker_thread
return await future
^^^^^^^^^^^^
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 967, in run
result = context.run(func, *args)
File "/app/test-pdbpp/main.py", line 8, in read_root
breakpoint()
~~~~~~~~~~^^
File "/usr/local/lib/python3.13/bdb.py", line 116, in trace_dispatch
return self.dispatch_opcode(frame, arg)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/usr/local/lib/python3.13/bdb.py", line 215, in dispatch_opcode
self.user_opcode(frame)
~~~~~~~~~~~~~~~~^^^^^^^
File "/usr/local/lib/python3.13/pdb.py", line 448, in user_line
self.interaction(frame, None)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/pdbpp.py", line 449, in interaction
return self._interaction(frame, tb)
~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/app/test-pdbpp/.venv/lib/python3.13/site-packages/pdbpp.py", line 483, in _interaction
self._cmdloop()
~~~~~~~~~~~~~^^
File "/usr/local/lib/python3.13/pdb.py", line 511, in _cmdloop
self.cmdloop()
~~~~~~~~~~~~^^
File "/usr/local/lib/python3.13/cmd.py", line 134, in cmdloop
line = input(self.prompt)
File "/usr/local/lib/python3.13/_pyrepl/readline.py", line 364, in input
reader = self.get_reader()
File "/usr/local/lib/python3.13/_pyrepl/readline.py", line 358, in get_reader
console = Console(self.f_in, self.f_out, encoding=ENCODING)
File "/usr/local/lib/python3.13/_pyrepl/unix_console.py", line 202, in __init__
signal.signal(signal.SIGCONT, self._sigcont_handler)
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/signal.py", line 58, in signal
handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
ValueError: signal only works in main thread of the main interpreter
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working