JuliaPy / JuliaPy/PythonCall.jl
IO from python-spawned threads causes deadlocks
- 主要言語
- Julia
- スター
- 1.1k
- フォーク
- 86
- 平均マージ
- 1日 22時間
- マージ済み PR(30日)
- 3
説明
**Description**
Carrying over from [#539](https://github.com/JuliaPy/PythonCall.jl/issues/539#issuecomment-2293753477)
The following code reaches a deadlock:
```python
from concurrent.futures import ThreadPoolExecutor, as_completed
from juliacall import Main as jl
jl.seval(
"""
function my_sqr()
println("Julia get's stuck at this print statement issued from thread $(Threads.threadid())")
a = rand(10)
for ii in 1:size(a, 1)
a[ii] = a[ii]^2
end
return sum(a)
end
"""
)
pool = ThreadPoolExecutor(2)
fs = {pool.submit(jl.my_sqr): ix for ix in range(10)}
for future in as_completed(fs):
print("running")
rank = fs[future]
results = future.result()
print("done")
print(results)
```
**Potential Fix**
Adding `ccall(:jl_enter_threaded_region, Cvoid, ())` as suggested in https://github.com/JuliaPy/PythonCall.jl/issues/539#issuecomment-2295200264 fixes this issue but not the original one of #539.
PythonCall may consider to invoke `jl_enter_threaded_region` behind the scenes.
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
Start by running the provided Python ThreadPoolExecutor example with juliacall and confirm where execution deadlocks. Then inspect the PythonCall path used for Python-spawned calls and the suggested jl_enter_threaded_region invocation; done means eliminating this deadlock without regressing the related behavior described in #539.
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- backend
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100