Repository navigation
Fix: read_parquet du cache yfinance sans thread pool Arrow — remede pyarrow borne au site tueur de worker (#16288) - #16421
Conversation
Correction causale au site prod (download_yfinance.py:41) : le pool de threads natif d'Arrow est le siege du crash natif observe sous xdist (Fatal Python error: Aborted dans pyarrow.parquet.core.read_table, worker gw0 mort, jambe bloquee -- DM ai-01 2026-09-16, run 35100238761). use_threads=False desactive ce pool pour CE read ; cache ~70 Ko, cout mesure +0,18 ms/lecture. Boucles xdist avant/apres 20x+20x verts. Watchdog #16294 conserve tel quel. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
jsboige
left a comment
There was a problem hiding this comment.
[adjoint — preflight COMMENTED] READY au head exact 7b8502400683bdd727565658af4698d7a7eb5bad.
Relecture du body, des 0 commentaires, des 0 reviews, des 0 threads inline, du commit unique, du diff et des checks latest-wins :
- scope exact : un fichier, +7/−1, au site causal
scripts/datasets/download_yfinance.py;pd.read_parquet(cache)devientpd.read_parquet(cache, use_threads=False)sans contournement ni affaiblissement de test ; - le stack CI antérieur nomme précisément
download_yfinance.py:41→ pandasread_parquet→ pyarrowread_table, puis mort du worker xdist ; le paramètre désactive le pool natif Arrow au site tueur ; - validation post-fix au SHA courant : jambe Scripts Tests CPU verte avec 13 745 pass / 0 fail / 94 skip / 8 xfail, plus les floors et les autres checks requis verts ;
- claim
paths:canonique, aucun autre PR ouvert sur le chemin, et watchdog #16294 préservé ; - B.0 : zéro remarque sur les trois surfaces, donc rien à lever.
Le PR gate rouge n'est pas un défaut : son log indique settled: 14 check(s) green, puis uniquement le DWELL depuis la tête du 2026-09-16T14:38:57Z, échéance 16:38:57Z. Aucun rerun anticipé ni push n'est requis.
Nits documentaires non bloquants : le diff porte six lignes de commentaire, pas cinq ; les 13 821 tests rapportés sont un run local distinct de la jambe CI vérifiable à 13 745. Ces écarts ne changent ni le correctif ni sa validation.
Disposition adjointe : READY après échéance/réagrégation DWELL, aucune réserve de fond. La décision de merge reste à ai-01 ; aucun APPROVED, CHANGES_REQUESTED, merge ou close effectué par l'adjoint.
|
[ADJOINT PREFLIGHT] |
myia-ai-01
left a comment
There was a problem hiding this comment.
[ai-01 exact-head] APPROVED — 7b8502400683bdd727565658af4698d7a7eb5bad
Body complet, 1 commentaire, 1 review, 0 thread et diff complet lus.
Le changement est limité au site causal nommé par la trace CI : pd.read_parquet(cache, use_threads=False) désactive le pool natif Arrow pour les petits caches yfinance sans isoler ni affaiblir le test. Le coût mesuré (+0,18 ms/lecture de 70 Ko) est négligeable ; le watchdog reste byte-identique et la jambe CPU post-fix est verte (13 745 pass dans la CI vérifiable, suite locale distincte 13 821 pass correctement qualifiée par l'adjoint). Tous les checks latest-wins, dont Scripts Tests CPU et PR gate, sont verts.
B.0 est clair, zéro thread, aucun autre chemin touché. Les deux écarts documentaires relevés par l'adjoint (six lignes de commentaire et distinction mesure locale/CI) sont explicités et sans impact sur le correctif.
Cette review mute la surface : aucun merge avant nouveau [ADJOINT PREFLIGHT] exact-head et consommation READY.
|
[ADJOINT PREFLIGHT] |
Grain: MED/tooling -- lane myia-po-2026:CoursIA -- prev: DEEP/notebook-python #16343
See #16288 (remede pyarrow borne selon le DM ai-01 du 2026-09-16T15:56Z : la preuve causale nouvelle —
Fatal Python error: Aborteddanspyarrow.parquet.core.read_table->pandas.read_parquet->download_yfinance.py:41->test_download_yfinance.py:133::test_cache_hit_returns_cached_data, gw0Not properly terminated— designe LE site tueur de worker).Seeet nonCloses: le chien de garde (#16294, merge) tient l'autre moitie du critere d'acceptance ; la cause des morts reste partiellement ouverte (issue honnete).Livrable (1 fichier, 7 lignes dont 5 de commentaire)
scripts/datasets/download_yfinance.py:41:pd.read_parquet(cache)->pd.read_parquet(cache, use_threads=False).Correction CAUSALE au site de production, pas une isolation du test : le pool de threads natif d'Arrow est le siege du crash (stack trace CI :
read_table->Abort).use_threads=Falsedesactive ce pool pour CE read. Le cache yfinance fait quelques Ko (mesure : 1305 lignes, 70 362 octets pour 2020-2024 quotidien) — le thread pool n'y apporte rien, et le fix protege TOUS les appels du module (toute jambe CI qui execute le module), pas seulement le test qui a revele le defaut.Pourquoi pas l'isolation xdist
L'isolation sequentielle du test (marker, job separe) aurait deux defauts : le crash natif tuerait quand meme LE process qui execute le test (un worker isole reste un worker mort, et le master reste bloque -- le defaut de #16288 est precisement l'attente du master), et elle ne protegerait aucun des autres appels du module. Le DM laissait les deux voies ; la correction causale domine.
Preuve avant/apres
use_threads=False— +0,18 ms par lecture de cache. Invisible dans un pipeline dont l'alternative au cache est un telechargement reseau yfinance en secondes.pytest scripts/tests/test_download_yfinance.py -n 4 --dist loadscope -qx 20 avant le fix, x 20 apres) : 40/40 runs verts, 1120 executions du module de test, zero crash natif. Honnete : le crash natif ne s'est pas reproduit localement (Windows vs runner ubuntu ; intermittent par nature — le stack trace CI reste la preuve causale, le fix coupe le mecanisme implique). Les timings avant/apres sont identiques (1,26-1,42 s).Validation
38 passed(28 yfinance + 10 watchdog).Deconflit
Census PRs ouvertes par fichiers : 0 PR touchant
download_yfinance.pyouxdist_watchdog.py. Mon claim sur #16288 (commentaire 5699288744) porte-- paths: scripts/datasets/download_yfinance.py. Le watchdog #16294 est conserve tel quel (exigence du DM « en conservant watchdog + tests causaux ») — le seul fichier livre est le site pyarrow.Reprise de #15762 sans 4e rerun aveugle
Commande exacte apres merge de cette PR :
(puis le run
Scripts Tests (CPU)rejoue la jambe AVEC le fix pyarrow dans l'arbre ; en cas de nouvelle immobilite, le verdict XDIST-WATCHDOG #16294 nommera le worker mort au lieu du mur — plus de lecture « depassement ».)See #16288
Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
🤖 Generated with Claude Code