Freeze the resolved interpreter for child processes
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
研究方向
從 src/C/context.jl 開始,追蹤 getpref_exe 和 CTX.which 在子程序啟動期間如何處理 CondaPkg。驗證現有由 CI 門控的行為和 preference 慣例,然後確認產生的程序會繼承已解析的可執行檔,而不會重新解析 CondaPkg,並且使用者設定的 JULIA_PYTHONCALL_EXE 保持不變。
由索引模型根據 Issue 內容生成。
描述
When PythonCall resolves its interpreter via CondaPkg, each child process that loads
PythonCall re-resolves the same CondaPkg environment from scratch. Spawn several at once —
e.g. Distributed workers for parallel data loading (MLUtils DataLoader(...; num_workers=N)
over a PythonCall-backed dataset) — and they serialize on CondaPkg's lock, spamming
CondaPkg: Waiting for lock to be freed and redoing work the parent already did.
PythonCall already has the fix, but gates it behind CI=true and flags it as a hack
(src/C/context.jl, v0.9.35):
# HACK: If we are using CondaPkg, prevent child processes from using it by explicitly
# setting the executable. ...
# A better solution may be to use some environment variable to "freeze" CondaPkg in
# child processes.
# Only done when CI=true since it's a hack.
if (get(ENV, "CI", "false") == "true") && (CTX.which === :CondaPkg)
ENV["JULIA_PYTHONCALL_EXE"] = CTX.exe_path::String
end
Since JULIA_PYTHONCALL_EXE is exactly the "freeze" env var the comment asks for (child
processes inherit ENV, and getpref_exe reads it), the same line solves the general case.
Proposal
Set JULIA_PYTHONCALL_EXE whenever CTX.which === :CondaPkg, not only under CI — ideally
behind a preference (e.g. freeze_child_processes, default true) so it can be disabled.
get! already leaves a user-set value untouched.
Workaround
A downstream package can do this itself after init:
if PythonCall.C.CTX.which === :CondaPkg
get!(ENV, "JULIA_PYTHONCALL_EXE", PythonCall.python_executable_path()::String)
end
I've done this in https://github.com/JuliaGenAI/HuggingFaceDatasets.jl/pull/64
- 主要語言
- Julia
- 星號
- 1.1k
- 分支
- 89
- 平均合併
- 2 天 15 小時
- 30 天內合併 PR
- 7
環境準備
這個專案沒有提供開發容器、Dockerfile 或貢獻指南,環境需要你自己搭建:先看它的 README,通用步驟見我們的新手貢獻指南。
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
JuliaPy/PythonCall.jl 的其他 Issue
-
難度 3/5 1-2 天 新手友好度 55/100
JuliaPy/PythonCall.jl#828 · 7 則留言 ·
維護者通常 1 天內回覆
-
bug
難度 4/5 3-5 天 新手友好度 48/100
JuliaPy/PythonCall.jl#809 · 2 則留言 ·
維護者通常 1 天內回覆
-
enhancement
難度 5/5 一週以上 新手友好度 35/100
JuliaPy/PythonCall.jl#805 · 4 則留言 ·
維護者通常 1 天內回覆
-
enhancement
難度 5/5 一週以上 新手友好度 25/100
JuliaPy/PythonCall.jl#790 ·
維護者通常 1 天內回覆
-
bug
難度 4/5 3-5 天 新手友好度 45/100
JuliaPy/PythonCall.jl#765 · 6 則留言 ·
維護者通常 1 天內回覆
查看 JuliaPy/PythonCall.jl 的全部 Issue
相似的 Issue
-
Chains resumed from `initial_state` take `num_warmup + 1` warm-up steps可能已有人在做 @thevolatilebit 今天認領。 未關閉
難度 2/5 1-3 小時 新手友好度 80/100
TuringLang/AbstractMCMC.jl#220 ·
-
found-by-agent
難度 2/5 1-3 小時 新手友好度 68/100
exanauts/SparseDirectSolver.jl#92 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 78/100
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 90/100
NumericalEarth/Breeze.jl#1051 ·
維護者通常 1 天內回覆
-
lu_instance/qr_instance run a full factorization for FixedSizeArrays可能已有人在做 @devmotion 今天認領。 未關閉
難度 2/5 1-3 小時 新手友好度 72/100
JuliaArrays/ArrayInterface.jl#510 ·