Kdb 并行执行-哪一方报告错误?
使用不同的方法sync/async回调调用方进程时,我在不同方面遇到错误:Kdb 并行执行-哪一方报告错误?,kdb,k,Kdb,K,使用不同的方法sync/async回调调用方进程时,我在不同方面遇到错误: $ q -p 1234 │$ q │q)h:hopen`::1234; │q)neg[h]({.z.w x};42) q)'type │ │q)neg[h]({neg[.z.w] x};42) │q)'type │ │q)neg[h]({neg[.z.w]
$ q -p 1234 │$ q
│q)h:hopen`::1234;
│q)neg[h]({.z.w x};42)
q)'type │
│q)neg[h]({neg[.z.w] x};42)
│q)'type
│
│q)neg[h]({neg[.z.w] x};42); h[]
│42
你能解释一下第一和第二种情况下的这种行为吗?为什么使用sync callback命令.z.w x在第二个进程上出现异常,而使用neg[.z.w]回调在调用方上出现异常
对于第三种情况:这是否类似于IPC中的一种模式或常见用例,用空args h[]/h::跟踪带有“sync”句柄的异步调用,以获取返回的结果,并为它们生成这样的ad hock处理程序
Upd:
阻塞接收构造是否替换.z.ps/.z.pg调用
Upd2:
如果存在延迟同步-是否存在延迟异步
当被问及Upd和Upd2时。以下内容有助于澄清发生了什么 案例1: 这会使遥控器出现故障,但事实并非如此。它正在远程对“.z.w 42”进行评估,它将同步消息发送回本地进程,在本地进程中由默认定义为value的.z.pg对其进行评估值42'会导致类型错误,并返回给远程服务器
q)h:hopen 1234
q).z.pg:{value x};system"e 1"
q)neg[h]({.z.w x};42)
q)'type
[0] .z.pg:{value x}
^
q))
案例2:
同样,这次由.z.ps对“value 42”的求值失败,默认定义也是value,并出现类型错误,但由于它是异步的,因此不会返回到发送进程
q).z.ps:{value x}
q)
q)neg[h]({neg[.z.w] x};42)
q)'type
[0] .z.ps:{value x}
^
q))
案例3:
这是一种称为延迟同步的IPC通信方法。在发送异步消息后,我们使用称为阻塞接收的构造阻塞/侦听/挂起连接,等待响应
在某些情况下,可能不需要挂起连接,也就是说,如果回调调用了类似这样的另一个函数
q)neg[h]({neg[.z.w](0N!;x)};42);
q)42
q)add:(0N!10+);neg[h]({neg[.z.w](`add;x)};42);
q)52
延迟同步消息在mserve.q中使用-下面应该有助于澄清发生了什么 案例1: 这会使遥控器出现故障,但事实并非如此。它正在远程对“.z.w 42”进行评估,它将同步消息发送回本地进程,在本地进程中由默认定义为value的.z.pg对其进行评估值42'会导致类型错误,并返回给远程服务器
q)h:hopen 1234
q).z.pg:{value x};system"e 1"
q)neg[h]({.z.w x};42)
q)'type
[0] .z.pg:{value x}
^
q))
案例2:
同样,这次由.z.ps对“value 42”的求值失败,默认定义也是value,并出现类型错误,但由于它是异步的,因此不会返回到发送进程
q).z.ps:{value x}
q)
q)neg[h]({neg[.z.w] x};42)
q)'type
[0] .z.ps:{value x}
^
q))
案例3:
这是一种称为延迟同步的IPC通信方法。在发送异步消息后,我们使用称为阻塞接收的构造阻塞/侦听/挂起连接,等待响应
在某些情况下,可能不需要挂起连接,也就是说,如果回调调用了类似这样的另一个函数
q)neg[h]({neg[.z.w](0N!;x)};42);
q)42
q)add:(0N!10+);neg[h]({neg[.z.w](`add;x)};42);
q)52
在mserve.q中使用延迟同步消息传递-