kdb - kdb - 在不同进程中运行函数
问题描述
我希望主 q 进程启动从属进程,为每个从属进程提供一个在输入列表上执行的函数。对于每个原子输入,该函数将下载一些数据(使用服务器句柄通过 IPC 在服务器上执行远程函数)并将输出表作为 csv 保存到磁盘。
srv:hopen `:server:port:user:pass
f:{[names;serverhandle]
{[name;serverhandle]
0N!"Processing ",string name;
r:serverhandle(`.remotefunc;name);
savelocation:"tmp/";
(`$savelocation,(string name),".csv") 0: csv 0: r;
}[;serverhandle] each names
}[;srv];
我正在启动 3 q 从属进程:
handles:`u#`int$();
.z.pd:{n:abs system"s";$[n=count handles;handles;[hclose each handles;:handles::`u#hopen each mainport+1+til n]]};
.z.pc:{handles::`u#handles except x;};
startQs:{{value"\\q -p ",string[x]," -slave ",string[x-mainport]}each p:(value"\\p")+1+ til abs system"s"};
startQs[]; / starts slave q processes
.z.pd[]; / populates handles of slave q processes
然后我尝试在每个从属进程上执行f
相同大小的批处理。names
neg[handles] @' (f),/:enlist each (3;0N) # `vincent`mia`jules`marsellus`butch`jimmie`honey;
所以
- 第一个从进程执行f
-`vincent`mia`jules
第二个从进程执行f
-`marsellus`butch`jimmie
第三个从进程f
执行`honey
但是当我启动整个脚本时,q name-dl.q -s 3 -p 5012
什么也没有发生(没有下载文件)。当我在主f
进程上手动执行时,它可以工作(例如)f[`vincent]
谢谢您的帮助
解决方案
这种方法的替代方法是使用peach
. 如果你启动你的从属进程,你可以运行:
f peach (3;0N) # `vincent`mia`jules`marsellus`butch`jimmie`honey
哪个应该在从属进程上运行每个命令。
推荐阅读
- c++ - 复合解引用和赋值的运算符重载
- javascript - 来自 jQuery 回调的数据无法比较
- python - free():无效指针已中止(核心转储)
- r - "," read.csv 中的分隔符 - R
- matlab - 使用方法 extractSurFFeatures 找到包含提取的圆(兴趣点)的矩形区域
- python - 在 Jupyter Notebook 中使用 Scikit Learn 时内核死机
- android - POS热敏打印机阿拉伯字母单独打印问题
- terraform-provider-aws - Terraform 的 MSK_AWS 集群问题
- r - 在 Shiny 中显示静态 html 表时出现意外结果
- c# - C# - 查询有关使用编辑按钮从 DataGrid 更新记录