首页 文章

问:KDB / PyQ发布者订阅者使用python对象中的提要

提问于
浏览
2

我一直在尝试重现发布者订阅者示例:https://code.kx.com/wiki/Cookbook/publishsubscribe

一切都工作得很好,只要它纯粹与q相关 .

我一直在尝试使用PyQ内核在jupyter笔记本中重现订阅者 . 我没有成功地在python对象中获得订阅者输出/提要 . 订阅者每次都在内核输出(控制台)中打印 .

我在java客户端上看到q没有太大成功(https://code.kx.com/q/interfaces/java-client-for-q/

我理想的目标是:

  • 在命令行中运行我的发布者(到目前为止这是非常简单的部分)

  • 有一个python笔记本,它监听我的发布者发布的端口,并在新的Feed进入时处理事件

  • websocket解决方案将是出色的

有没有人有一些关于如何在python方面做到这一点的指针?任何例子?

非常感谢,Yael Darmon

1 回答

  • 1

    为了将q输出重定向到Jupyter笔记本,你应该为%% q cell magic指定-1(对于stdout)和-2(对于stderr)选项 .

    我想在python对象中使用它

    您可以通过将标准流重定向到管道来捕获它们 . 例如,在Linux上你可以做到

    >>> import os
    >>> r,w = os.pipe()
    >>> q('\\2 /dev/fd/%d' % w)
    k('::')
    >>> q('-2 "hello"')
    k('-2')
    >>> os.read(r, 5)
    b'hello'
    

    请注意,我使用stderr进行说明,因为重定向stdout会干扰REPL显示,但相同的技术适用于stdout . 适用于管道的常见注意事项 . 管道具有有限的缓冲区,因此您需要安排定期读取 . 通常,这将涉及某种事件管理,这超出了本答案的范围 . 如果您不想处理这种复杂性,最好的办法是使用临时文件而不是管道 . 我还建议研究如何在pytest中实现“fdcap”夹具 .

相关问题