Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kdb 多进程q的启动脚本_Kdb - Fatal编程技术网

Kdb 多进程q的启动脚本

Kdb 多进程q的启动脚本,kdb,Kdb,我试图用多个进程来启动kdb,以便使用kdb developer编写脚本。 我理解,设置的流程需要在主流程之外完成 我尝试使用.bashrc中的一个函数来实现这一点,该函数创建了7个实例,这些实例最多需要8个进程。然后,我与开发人员一起启动最后一个流程。 当我这样做并尝试连接时,我的操作系统会通知开发人员连接被拒绝。 您能否建议启动8个进程的正确方法,以便在KDB中与IPC一起使用? 这是我在.bashrc中的多进程启动函数: mq() { echo "Spawning 7 q

我试图用多个进程来启动kdb,以便使用kdb developer编写脚本。
我理解,设置的流程需要在主流程之外完成

我尝试使用.bashrc中的一个函数来实现这一点,该函数创建了7个实例,这些实例最多需要8个进程。然后,我与开发人员一起启动最后一个流程。 当我这样做并尝试连接时,我的操作系统会通知开发人员连接被拒绝。 您能否建议启动8个进程的正确方法,以便在KDB中与IPC一起使用? 这是我在.bashrc中的多进程启动函数:

mq() {
    echo "Spawning 7 q processes";
    q -s -8 -p 20001;
    q -s -8 -p 20002;
    q -s -8 -p 20003;
    q -s -8 -p 20004;
    q -s -8 -p 20005;
    q -s -8 -p 20006;
    q -s -8 -p 20007;
}
以下是.bashrc中启动开发人员的代码:

# Assumes user name is claude and opens Q with 8 threads. (to build separate processes use a negative number) 
alias q='rlwrap -r q -s -8'
# Developer set to open with 8 threads. (to build separate processes use a negative number)
alias developer='source /pathToDir/developer/config/config.profile; rlwrap -r q /pathToDir/developer/launcher.q_'
要启动所有这些,我打开一个终端并键入
mq
,然后打开另一个终端并键入
developer
进入developer后,我为每个流程分配一个句柄,如下所示:
{hopen(“::”,字符串[20000+x])}每1+7个
然后系统告诉我连接被拒绝

我该怎么做


感谢和问候,

要连接到q流程,应使用hopen。 在问答环节:

q){hopen("::",string[20000+x])}each 1+til 7
6 7 8 9 10 11 12i
q){hopen("::",string[20000+x])}each 1+til 7
4 5 6 7 8 9 10i
它返回每个进程的句柄。
我们可以利用这些句柄为每个进程发送命令。

我认为您应该在shell脚本中启动多个q进程时使用&when:

mq() {
            echo "Spawning 7 q processes";
                q -s -8 -p 20001 &
                    q -s -8 -p 20002 &
                        q -s -8 -p 20003 &
                            q -s -8 -p 20004 &
                                q -s -8 -p 20005 &
                                    q -s -8 -p 20006 &
                                        q -s -8 -p 20007 &
                                }
mq
没有&,一次只能打开一个进程。 它对我有用: ./mq.sh

在问答环节:

q){hopen("::",string[20000+x])}each 1+til 7
6 7 8 9 10 11 12i
q){hopen("::",string[20000+x])}each 1+til 7
4 5 6 7 8 9 10i

“我知道设置的流程需要在主流程之外完成。”这一约束来自何方?主进程也可以很容易地生成进程本身。Hi@user20349-我尝试过,但无法让它工作-其他进程启动了,但它们似乎都指向一个额外的整数(KDB用来表示进程),该整数本身指向主进程。桃子在测试中的效果从未超过两倍。一位比我更了解KDB的同事建议我尝试使用外部bash脚本。还请注意,我已经纠正了我原来问题中一个粗心的剪切和粘贴。(我连接到应该用hopen打开的端口的位)。如果你知道如何做到这一点,欢迎反馈!抱歉-我的部分剪得太草率了。我有一个相当于上述的。(我粘贴的错误声明来自之前尝试从主进程内启动进程的尝试。根据您的回答,我仍然得到相同的结果。我将更正上面的问题。这创建了一组打开的进程。奇怪的是,当我连接到它们并发送“.z.w”时,它们都返回相同的整数7)。另外,标准的Peach测试似乎显示了额外内核带来的最小好处:
g:{sum y*exp x?1.0}\ts g'[2#10000000;23]\ts[g;]Peach flip(2#10000000;23)
在.z.p*回调中给出:453 268436128 385 268436608
,它返回客户端会话的句柄,不是当前会话。
您正在使用.z.w获得从服务器进程到开发人员会话的句柄。此外,该查询不会从辅助数据库中获得任何好处,因为在8个辅助数据库之间只需要发送2组参数。仅使用2个。二级数据库之间的序列化和反序列化也会带来成本。