GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — Introduction of Thread._handle: _thread._ThreadHandle in Python3.13 has broken an unknown number of packages · Issue #132578 · python/cpython Open Labels 3.13only security fixesonly security fixes3.14bugs and security fixesbugs and security fixeseasystdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error DescriptionBug reportBug description:To open with- Python is great, probably the language I have written the most code in; super excited for the progressing into no-GIL, at my day job we've built a massive Python system and we're hopeful that no-GIL (at least for parts of it) will help with a bunch of perf issues that we're presently either enduring or have built complexity to work around. Onto the issue; in the code of a number now-broken (since Python 3.13) packages (if you Google around for class SomeThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.stopped = threading.Event() def _handle(self): some_logic_here() def run(self): while not self.stopped.is_set(): self._handle() However, since Python 3.13, attempts to use this pattern result in failures like like this: Traceback (most recent call last): File "/Users/edwardbeech/.venv/ims-mono-py3.13/lib/python3.13/site-packages/ims_utils/utils/thread_utils.py", line 208, in _do_tasks_and_return_duration self.tasks() ~~~~~~~~~~^^ File "/Users/edwardbeech/Projects/FTP/ims-mono/wireless-manager-back-end/other/tcp/tcp_socket.py", line 111, in tasks self._handle() ~~~~~~~~~~~~^^ TypeError: '_thread._ThreadHandle' object is not callable I believe this is because of the introduction of this code in class Thread: .... def __init__(self, group=None, target=None, name=None, ... self._handle = _ThreadHandle() Now, for sure- arguably this pattern is problematic in general because I don't know enough about internal Python development to know if there's a strategy with these sorts of things e.g. perhaps we're happy to break userspace and folks must simply revise their libraries (and if so, then that's fine, I'm happy with that answer). If there is no such strategy though and we're more focused on interoperation across versions, I think an easy fix here would be to just change to be a dunder property instead of a sunder property and call it a day- I would probably warn against changing all the other existing sunder properties to dunder properties though because again, who knows who is relying on them in some odd way as an interface lol. Here's some Docker-based testing I was doing; probably not really needed to paint the picture: docker run --rm -it --entrypoint python3 python:3.12 -c 'from threading import Thread; t = Thread(); print(repr(t._handle)) if hasattr(t, "_handle") else print("property does not exist")' property does not exist docker run --rm -it --entrypoint python3 python:3.13 -c 'from threading import Thread; t = Thread(); print(repr(t._handle)) if hasattr(t, "_handle") else print("property does not exist")' <_thread._ThreadHandle object: ident=0> docker run --rm -it --entrypoint python3 python:3.14.0a7 -c 'from threading import Thread; t = Thread(); print(repr(t._handle)) if hasattr(t, "_handle") else print("property does not exist")' <_thread._ThreadHandle object: ident=0> CPython versions tested on:3.13 Operating systems tested on:macOS Linked PRsActivity
MetadataMetadataAssigneesLabels3.13only security fixesonly security fixes3.14bugs and security fixesbugs and security fixeseasystdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error ProjectsMilestoneRelationshipsDevelopmentIssue actions |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |