JuliaPy / JuliaPy/PythonCall.jl
IO from python-spawned threads causes deadlocks
- Langage dominant
- Julia
- Étoiles
- 1.1k
- Forks
- 86
- Merge moyen
- 1 j 22 h
- PR mergées (30 j)
- 3
Description
**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.
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Piste de recherche
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.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- backend
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100