我正在使用 R 从 R 调用 C 函数.C
。这是一个将运行几分钟的模拟,并且每隔几次迭代,我想向 R 发送一些进度信息。也就是说,我不想等到 C 函数完成发送所有信息到一次到R。
注意:我不想在 R 中打印(Rprintf
这样做)。但我想将此类信息传递给 R。error
如果包含,也使用将错误传递给 R R.h
,但我对异常处理不感兴趣。
我的第一个方向:我futile.logger
在 R 中使用来记录这些东西。最好,如果可以将此类信息传递给调用 R 函数正在使用的同一记录器,那就太好了。但我在网上找不到任何例子。
替代方向:我也在使用redis将信息写入缓存,然后由连接到redis db的其他人使用。但是我没有找到redis的任何C接口。我不想使用 Lua。我发现的最接近的是用 C 编写自定义 Redis 命令 - 第 2 部分。
但在我看来,我的需求要简单得多。有任何想法吗?
更新:这就是我希望这能理想地工作的方式。
# PART 1: webserver calls R function
# the R call
res = .C("montecarlo_sampler.c", as.matrix(inputData), as.matrix(ouputData), as.integer(iterations))
// PART 2: the C function
void montecarlo_sampler( double *inputData, double *outputData, int *iterations){
// do some preprocessing
int iter =1;
while(iter<1000000){
if(iter % 1000 == 0) {
// summarize output from last 1000 iterations
// dump summary data to a logger or redis
}
// do usual sampling stuff in C
}
}
PART 3:
// listening on the django side
// polls redis every few seconds to see if update has reached.
// sends summary output for visualization to client