gpt4 book ai didi

dataframe - 在 Julia 中与 @sync @async 并行

转载 作者:行者123 更新时间:2023-12-04 15:15:08 25 4
gpt4 key购买 nike

我有一些很重的 csv 表,我想将其与 @sync @sync 宏并行导入。对此不是很熟悉,我尝试过这种方式:

#import files
@sync @async begin
df1=CSV.File(libname*"df1.csv")|> DataFrame!
df2=CSV.File(libname*"df2.csv")|> DataFrame!
end

我已经完成了任务,但是我之后制作的数据子集似乎受到了影响:

select!(df1, Not("Var1"))

ArgumentError : Column :Var1 not found in the data frame

PS:没有@sync 宏代码运行良好

我可能做错了什么。任何想法都会有所帮助。谢谢

最佳答案

@sync @async 除了在本地范围内引入 begin... end block 外,不要在代码中做任何事情。

这里发生的是您正在创建一个新范围并且永远不会修改 df1df2 的全局值 - 而不是您看到它们的旧值。

如果 I/O 是您代码中的瓶颈,则正确的代码如下:

dfs = Vector{DataFrame}(undef, 2)
@sync begin
@async dfs[1]=CSV.File(libname*"df1.csv")|> DataFrame!
@async dfs[2]=CSV.File(libname*"df2.csv")|> DataFrame!
end

但是,问题通常不是 I/O,而是 CPU。在这种情况下,绿色线程并没有多大用处,您需要普通的常规线程:

dfs = Vector{DataFrame}(undef, 2)
Threads.@threads for i in 1:2
dfs[i]=CSV.File(libname*"df$i.csv")|> DataFrame!
end

请注意,要使此代码使用多线程,您需要在运行 Julia 之前设置 JULIA_NUM_THREADS 系统变量,例如:

set JULIA_NUM_THREADS=2

关于dataframe - 在 Julia 中与 @sync @async 并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64489282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com