gpt4 book ai didi

r - 有没有办法跟踪 mclapply 的进度?

转载 作者:行者123 更新时间:2023-12-02 09:07:49 27 4
gpt4 key购买 nike

我喜欢 plyr's llply 中的设置 .progress = 'text'。然而,这让我非常焦虑,不知道 mclapply (来自 multicore 包)有多远,因为列表项被发送到各个核心,然后在最后进行整理。

我一直在输出类似 *currently in sim_id # ....* 的消息,但这不是很有帮助,因为它没有给我指示列表项完成的百分比(尽管知道我的脚本没有卡住并继续前进是有帮助的)。

有人可以提出其他想法,让我可以查看我的 .Rout 文件并获得进度感吗?我考虑过添加手动计数器,但不知道如何实现它,因为 mclapply 必须先完成对所有列表项的处理,然后才能给出任何反馈。

最佳答案

由于 mclapply 生成多个进程,因此可能需要使用 fifo、管道甚至套接字。现在考虑以下示例:

library(multicore)

finalResult <- local({
f <- fifo(tempfile(), open="w+b", blocking=T)
if (inherits(fork(), "masterProcess")) {
# Child
progress <- 0.0
while (progress < 1 && !isIncomplete(f)) {
msg <- readBin(f, "double")
progress <- progress + as.numeric(msg)
cat(sprintf("Progress: %.2f%%\n", progress * 100))
}
exit()
}
numJobs <- 100
result <- mclapply(1:numJobs, function(...) {
# Dome something fancy here
# ...
# Send some progress update
writeBin(1/numJobs, f)
# Some arbitrary result
sample(1000, 1)
})
close(f)
result
})

cat("Done\n")

这里,一个临时文件被用作fifo,主进程 fork 一个子进程,其唯一职责是报告当前进度。主进程继续调用mclapply,其中要计算的表达式(更准确地说,表达式 block )通过writeBin 将部分进度信息写入fifo 缓冲区。

由于这只是一个简单的示例,因此您可能必须根据您的需要调整整个输出内容。呵呵!

关于r - 有没有办法跟踪 mclapply 的进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10984556/

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