#![cfg(not(any(PyPy, GraalPy)))]
#![cfg(not(target_arch = "wasm32"))]
use pyo3::types::PyAnyMethods;
#[test]
fn test_concurrent_init_site_race() {
let tmpdir = std::env::temp_dir().join("pyo3_test_init_race");
std::fs::create_dir_all(&tmpdir).unwrap();
std::fs::write(
tmpdir.join("sitecustomize.py"),
"import sys, time\n\
sys._pyo3_site_done = False\n\
time.sleep(2)\n\
sys._pyo3_site_done = True\n",
)
.unwrap();
std::env::set_var("PYTHONPATH", &tmpdir);
std::thread::scope(|s| {
s.spawn(|| {
pyo3::Python::initialize();
});
s.spawn(|| loop {
let result = pyo3::Python::try_attach(|py| {
let done = py
.import("sys")
.unwrap()
.getattr("_pyo3_site_done")
.unwrap()
.extract::<bool>()
.unwrap();
assert!(done);
});
if result.is_some() {
break;
}
std::hint::spin_loop();
});
});
}