You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fromconcurrent.futuresimportThreadPoolExecutor, as_completedfromjuliacallimportMainasjljl.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): ixforixinrange(10)}
forfutureinas_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 #539 (comment) fixes this issue but not the original one of #539.
PythonCall may consider to invoke jl_enter_threaded_region behind the scenes.
The text was updated successfully, but these errors were encountered:
Indeed the semantics of how Julia and Python threads interact have not been totally worked out yet. In particular, Julia has a task scheduler which doesn't really like running on foreign threads. I think there are functions to let Julia adopt Python-created threads but I've not tried them out.
However for me, the advice in this section of the docs successfully makes the example work. I also needed to do pool.submit(jl.my_sqr._jl_call_nogil) to release the GIL while calling my_sqr - without it, the GIL is held by the Julia thread that is deadlocked, preventing the main Python thread from doing anything.
I would of course like to avoid having to explicitly do this yielding loop to make the threads run Julia code properly. Thanks for pointing out jl_enter_threaded_region. Hopefully some combination of this and thread adoption will make this all work.
Description
Carrying over from #539
The following code reaches a deadlock:
Potential Fix
Adding
ccall(:jl_enter_threaded_region, Cvoid, ())
as suggested in #539 (comment) fixes this issue but not the original one of #539.PythonCall may consider to invoke
jl_enter_threaded_region
behind the scenes.The text was updated successfully, but these errors were encountered: