Вы можете использовать макрос, который меняет свое поведение в зависимости от результата Threads.nthreads()
:
macro maybe_threaded(ex)
if Threads.nthreads() == 1
return esc(ex)
else
return esc(:(Threads.@threads $ex))
end
end
Без потоков этот макрос будет недоступен:
julia> @macroexpand @maybe_threaded for i in 1:5
print(i)
end
:(for i = 1:5
#= REPL[2]:2 =#
print(i)
end)
Но когда многопоточность включена и, например, JULIA_NUM_THREADS=4
она расширится до версии с резьбой:
julia> @maybe_threaded for i in 1:5
print(i)
end
41325
Редактировать: Перечитывая вопрос, я понимаю, что на самом деле это не отвечает, но это может быть полезно в любом случае.