多线程 Julia 显示枚举迭代器错误
Multi-threading Julia shows error with enumerate iterator
为什么这个非常简单的代码会在 Julia 1.1 中导致错误?
Threads.@threads for (index,value) in enumerate([0.1,0.2,0.3])
println(value^index)
end
显示的错误是:
Error thrown in threaded loop on thread 0: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 1), world=0x00000000000069dc)
Error thrown in threaded loop on thread 1: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 3), world=0x00000000000069dc)
我想在使用 enumerate
迭代器的地方使用 Threads.@threads
和更复杂的代码。
Threads.@threads
marco 期望数组仅迭代。 Here 你有一个关于 Discourse 的话题 link。
所以目前你只能使用例如迭代索引axes
或例如collect
eachindex
(这并不理想)。
所以在你的情况下这将是:
vec = [0.1,0.2,0.3]
Threads.@threads for index in axes(vec, 1)
println(vec[index]^index)
end
或
Threads.@threads for (index,value) in collect(enumerate([0.1,0.2,0.3]))
println(value^index)
end
为什么这个非常简单的代码会在 Julia 1.1 中导致错误?
Threads.@threads for (index,value) in enumerate([0.1,0.2,0.3])
println(value^index)
end
显示的错误是:
Error thrown in threaded loop on thread 0: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 1), world=0x00000000000069dc)
Error thrown in threaded loop on thread 1: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 3), world=0x00000000000069dc)
我想在使用 enumerate
迭代器的地方使用 Threads.@threads
和更复杂的代码。
Threads.@threads
marco 期望数组仅迭代。 Here 你有一个关于 Discourse 的话题 link。
所以目前你只能使用例如迭代索引axes
或例如collect
eachindex
(这并不理想)。
所以在你的情况下这将是:
vec = [0.1,0.2,0.3]
Threads.@threads for index in axes(vec, 1)
println(vec[index]^index)
end
或
Threads.@threads for (index,value) in collect(enumerate([0.1,0.2,0.3]))
println(value^index)
end