Skip to content

High level API is broken in 3.14 #235

@griffinmilsap

Description

@griffinmilsap

Looks like some of the changes in the clean-shutdown PR rely on APIs that were removed from 3.14.

uv sync --all-extras --python=3.14

~/repos/ezmsg feature/process-control* 3m 11s ❯ uv run examples/ezmsg_toy.py
2026-03-17 11:09:37.792 - pid: 25306 - MainThread - INFO - _initialize: Connected to GraphServer @ 127.0.0.1:25978
2026-03-17 11:09:37.795 - pid: 25306 - MainThread - INFO - _initialize: Running in 5 processes.
2026-03-17 11:09:37.900 - pid: 25308 - TaskThread - INFO - wrapped_task: SYSTEM/PING:spawn_once Complete
2026-03-17 11:09:37.900 - pid: 25306 - TaskThread - INFO - wrapped_task: SYSTEM/FOO:spawn_once Complete
2026-03-17 11:09:37.900 - pid: 25311 - TaskThread - INFO - on_message: Output[Default]: Spawned Once
2026-03-17 11:09:37.900 - pid: 25309 - TaskThread - INFO - on_message: Output[REPUB]: CombinedMessage(string='Spawned Once', number=0.0105096721555893)
2026-03-17 11:09:37.900 - pid: 25310 - TaskThread - INFO - on_message: Output[A1]: Spawned Once
2026-03-17 11:09:37.902 - pid: 25310 - MainThread - WARNING - new_threaded_event_loop: Shutdown suppressed 0 error(s) and cancelled 1 task(s). Shutdown was NOT clean; re-run with EZMSG_STRICT_SHUTDOWN=1 to debug tasks with poor shutdown behavior.
Process DefaultBackendProcess-4:
2026-03-17 11:09:37.902 - pid: 25311 - MainThread - WARNING - new_threaded_event_loop: Shutdown suppressed 0 error(s) and cancelled 1 task(s). Shutdown was NOT clean; re-run with EZMSG_STRICT_SHUTDOWN=1 to debug tasks with poor shutdown behavior.
2026-03-17 11:09:37.902 - pid: 25308 - MainThread - WARNING - new_threaded_event_loop: Shutdown suppressed 0 error(s) and cancelled 1 task(s). Shutdown was NOT clean; re-run with EZMSG_STRICT_SHUTDOWN=1 to debug tasks with poor shutdown behavior.
Process DefaultBackendProcess-5:
Process DefaultBackendProcess-2:
2026-03-17 11:09:37.902 - pid: 25309 - MainThread - WARNING - new_threaded_event_loop: Shutdown suppressed 0 error(s) and cancelled 4 task(s). Shutdown was NOT clean; re-run with EZMSG_STRICT_SHUTDOWN=1 to debug tasks with poor shutdown behavior.
Process DefaultBackendProcess-3:
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/multiprocessing/process.py", line 320, in _bootstrap
    self.run()
    ~~~~~~~~^^
  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/multiprocessing/process.py", line 320, in _bootstrap
    self.run()
    ~~~~~~~~^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 208, in run
    self.process(loop)
    ~~~~~~~~~~~~^^^^^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 208, in run
    self.process(loop)
    ~~~~~~~~~~~~^^^^^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 564, in process
    loop.run_in_executor(None, self.monitor_termination, complete_tasks, loop)
    ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 564, in process
    loop.run_in_executor(None, self.monitor_termination, complete_tasks, loop)
    ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/asyncio/base_events.py", line 898, in run_in_executor
    executor.submit(func, *args), loop=self)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/asyncio/base_events.py", line 898, in run_in_executor
    executor.submit(func, *args), loop=self)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 105, in submit
    fut = super().submit(fn, *args, **kwargs)
  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/multiprocessing/process.py", line 320, in _bootstrap
    self.run()
    ~~~~~~~~^^
  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/concurrent/futures/thread.py", line 215, in submit
    self._adjust_thread_count()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/multiprocessing/process.py", line 320, in _bootstrap
    self.run()
    ~~~~~~~~^^
milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 105, in submit
    fut = super().submit(fn, *args, **kwargs)
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 96, in _adjust_thread_count
    self._initializer,
    ^^^^^^^^^^^^^^^^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 208, in run
    self.process(loop)
    ~~~~~~~~~~~~^^^^^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 208, in run
    self.process(loop)
    ~~~~~~~~~~~~^^^^^^
  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/concurrent/futures/thread.py", line 215, in submit
    self._adjust_thread_count()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 564, in process
    loop.run_in_executor(None, self.monitor_termination, complete_tasks, loop)
    ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 564, in process
    loop.run_in_executor(None, self.monitor_termination, complete_tasks, loop)
    ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: '_DaemonThreadPoolExecutor' object has no attribute '_initializer'
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 96, in _adjust_thread_count
    self._initializer,
    ^^^^^^^^^^^^^^^^^
  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/asyncio/base_events.py", line 898, in run_in_executor
    executor.submit(func, *args), loop=self)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/asyncio/base_events.py", line 898, in run_in_executor
    executor.submit(func, *args), loop=self)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 105, in submit
    fut = super().submit(fn, *args, **kwargs)
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 105, in submit
    fut = super().submit(fn, *args, **kwargs)
AttributeError: '_DaemonThreadPoolExecutor' object has no attribute '_initializer'
  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/concurrent/futures/thread.py", line 215, in submit
    self._adjust_thread_count()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/concurrent/futures/thread.py", line 215, in submit
    self._adjust_thread_count()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 96, in _adjust_thread_count
    self._initializer,
    ^^^^^^^^^^^^^^^^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 96, in _adjust_thread_count
    self._initializer,
    ^^^^^^^^^^^^^^^^^
AttributeError: '_DaemonThreadPoolExecutor' object has no attribute '_initializer'
AttributeError: '_DaemonThreadPoolExecutor' object has no attribute '_initializer'
2026-03-17 11:09:37.923 - pid: 25306 - MainThread - WARNING - new_threaded_event_loop: Shutdown suppressed 0 error(s) and cancelled 2 task(s). Shutdown was NOT clean; re-run with EZMSG_STRICT_SHUTDOWN=1 to debug tasks with poor shutdown behavior.
Traceback (most recent call last):
  File "/Users/milsagw1/repos/ezmsg/examples/ezmsg_toy.py", line 193, in <module>
    ez.run(
    ~~~~~~^
        SYSTEM=system,
        ^^^^^^^^^^^^^^
    ...<3 lines>...
        ],
        ^^
    )
    ^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backend.py", line 979, in run
    runner.run_blocking()
    ~~~~~~~~~~~~~~~~~~~^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backend.py", line 671, in run_blocking
    self._run_main_process()
    ~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backend.py", line 775, in _run_main_process
    self._main_process.process(self._loop)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 564, in process
    loop.run_in_executor(None, self.monitor_termination, complete_tasks, loop)
    ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/asyncio/base_events.py", line 898, in run_in_executor
    executor.submit(func, *args), loop=self)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 105, in submit
    fut = super().submit(fn, *args, **kwargs)
  File "/Users/milsagw1/.local/share/uv/python/cpython-3.14.0rc1-macos-aarch64-none/lib/python3.14/concurrent/futures/thread.py", line 215, in submit
    self._adjust_thread_count()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/milsagw1/repos/ezmsg/src/ezmsg/core/backendprocess.py", line 96, in _adjust_thread_count
    self._initializer,
    ^^^^^^^^^^^^^^^^^
AttributeError: '_DaemonThreadPoolExecutor' object has no attribute '_initializer'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions