Skip to content

pn.serve with threaded=True does not work in Python 3.12 #6332

Open
@CmpCtrl

Description

ALL software version info

bokeh                     3.3.4
panel                     1.3.8
param                     2.0.2

python 3.12.2

Description of expected behavior and the observed behavior

It appears as tho the pn.serve(... ,threaded=True) option does not work in python 3.12.2. See the error message below. As far as i can tell the app doesn't matter, this was just some test app i had handy to demonstrate the bug.

I'm not sure i actually need this feature, but i'm sharing it since it took me a little bit to debug when upgrading an old app to python 3.12.

Complete, minimal, self-contained example code that reproduces the issue

"""threaded bug on py 3.12"""

import panel as pn


class App:
    def __init__(self) -> None:
        self.tabs = pn.Tabs(
            dynamic=True,
            tabs_location="left",
            css_classes=["tabs-left"],
            align="center",
            sizing_mode="stretch_width",
        )
        self.tabs.param.watch(self.update_active_tabs, ["active"])

    def build_tabs(self, event):
        tab1_thing = pn.pane.Markdown("# Tab 1 thing. Name=Tab1", name="Tab1")
        tab2_thing = pn.pane.Markdown("# Tab 2 thing. Name=Tab2", name="Tab2")
        self.tabs[:] = [("Tab 1 Alt Name", tab1_thing), ("Tab 2 Alt Name", tab2_thing)]

    def update_active_tabs(self, event):
        name = self.tabs.objects[self.tabs.active].name
        print(name)


def main():
    app = App()

    button = pn.widgets.Button(name="Build tabs")
    button.on_click(app.build_tabs)

    col = pn.Column(app.tabs, button)
    col.servable()

    return col


app = pn.serve(main, threaded=True)

Stack traceback and/or browser JavaScript console output

Launching server at http://localhost:56947
Task exception was never retrieved
future: <Task finished name='Task-1' coro=<SelectorThread.__init__.<locals>.thread_manager_anext() done, defined at c:\Users\...\CCG\ccg\.venv312\Lib\site-packages\tornado\platform\asyncio.py:462> exception=RuntimeError("can't create new thread at interpreter shutdown")>
Traceback (most recent call last):
  File "c:\Users\...\CCG\ccg\.venv312\Lib\site-packages\tornado\platform\asyncio.py", line 465, in thread_manager_anext
    await self._thread_manager_handle.__anext__()
  File "c:\Users\...\CCG\ccg\.venv312\Lib\site-packages\tornado\platform\asyncio.py", line 511, in _thread_manager
    self._thread.start()
  File "C:\Users\...\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 992, in start
    _start_new_thread(self._bootstrap, ())
  File "C:\Users\...\CCG\debugpy\debugpy\src\debugpy\_vendored\pydevd\_pydev_bundle\pydev_monkey.py", line 1114, in pydev_start_new_thread
    return _original_start_new_thread(_UseNewThreadStartup(function, args, kwargs), ())
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: can't create new thread at interpreter shutdown

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions