Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Description
Bug report
Bug description:
Discovered alongside#125243 with similar steps to reproduce. I don't have a simpler way to trigger this than "run the PyO3 tests in a loop" because I think it requires many threads accessing the python runtime simulatenously.
To trigger it, have a rust toolchain and Python installed, clone the PyO3 repo and execute the following command:
while RUST_BACKTRACE=1 UNSAFE_PYO3_BUILD_FREE_THREADED=1 cargo test --lib --features=full -- --test-threads=100; do :; doneYou may also hit some other test failures related to ZoneInfo, see the other issue I opened about that.
You will eventually see a test failure with the following text:
---- exceptions::socket::tests::gaierror stdout ----thread 'exceptions::socket::tests::gaierror' panicked at src/impl_/exceptions.rs:26:17:failed to import exception socket.gaierror: ImportError: cannot import name 'Mapping' from 'collections.abc' (/Users/goldbaum/.pyenv/versions/3.13.0t/lib/python3.13t/collections/abc.py)I slightly modified PyO3 to get a traceback as well (hidden because it's a distractingly long diff):
Details
diff --git a/src/impl_/exceptions.rs b/src/impl_/exceptions.rsindex 15b6f53b..de63ad59 100644--- a/src/impl_/exceptions.rs+++ b/src/impl_/exceptions.rs@@ -1,4 +1,8 @@-use crate::{sync::GILOnceCell, types::PyType, Bound, Py, Python};+use crate::{+ sync::GILOnceCell,+ types::{PyTracebackMethods, PyType},+ Bound, Py, Python,+}; pub struct ImportedExceptionTypeObject { imported_value: GILOnceCell<Py<PyType>>,@@ -20,8 +24,11 @@ impl ImportedExceptionTypeObject { .import(py, self.module, self.name) .unwrap_or_else(|e| { panic!(- "failed to import exception {}.{}: {}",- self.module, self.name, e+ "failed to import exception {}.{}: {}\n{}",+ self.module,+ self.name,+ e,+ e.traceback(py).unwrap().format().unwrap(), ) }) }And the traceback is:
Traceback (most recent call last): File "/Users/goldbaum/.pyenv/versions/3.13.0t/lib/python3.13t/socket.py", line 55, in <module> import os, sys, io, selectors File "/Users/goldbaum/.pyenv/versions/3.13.0t/lib/python3.13t/selectors.py", line 10, in <module> from collections.abc import MappingSo somehow during setup of thesocket module,Mapping isn't available yet, but only if many threads are simultaneously touching the Python runtime.
(ping@davidhewitt, we probably want to disable the socket error tests on the free-threaded build as well)
CPython versions tested on:
3.13
Operating systems tested on:
macOS