问:KDB+/PyQ 发布者订阅者在 python 个对象中有提要
Q: KDB+/PyQ publisher subscriber with feeds in python objects
我一直在尝试重现发布者订阅者示例:
https://code.kx.com/wiki/Cookbook/publishsubscribe
就纯 q 相关而言,一切正常。
我一直在尝试使用 PyQ 内核在 jupyter notebook 中重现订阅者。
我没能在 python 对象中成功获取订阅者 output/feeds。每一次,订阅者都会在内核输出(控制台)中打印。
我也一直在尝试在 PyQ 中复制一些类似于我在 java 客户端上看到的 q 的东西,但没有成功(https://code.kx.com/q/interfaces/java-client-for-q/)
我理想中想要实现的是:
- 运行 我在命令行中的发布者(到目前为止这是非常简单的部分)
- 有一个 python notebook 监听我的发布者发布的端口并在新提要进来时处理事件
- websocket 解决方案会很出色
有没有人对如何在 python 方面做到这一点有一些指示?有例子吗?
非常感谢,
耶尔达蒙
为了将 q 输出重定向到 Jupyter notebook,您应该为 %%q 单元魔法指定 -1(对于 stdout)和 -2(对于 stderr)选项。
I want it in a python object
您可以通过将标准流重定向到管道来捕获它们。例如,在 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。使用管道的常见注意事项适用。管道的缓冲区有限,因此您需要安排定期读取。通常,这将涉及某种超出此答案范围的事件管理。如果您不想处理这种复杂性,最好的办法是使用临时文件而不是管道。我还建议研究 "fdcap" fixture 如何在 pytest 中实现。
我一直在尝试重现发布者订阅者示例: https://code.kx.com/wiki/Cookbook/publishsubscribe
就纯 q 相关而言,一切正常。
我一直在尝试使用 PyQ 内核在 jupyter notebook 中重现订阅者。 我没能在 python 对象中成功获取订阅者 output/feeds。每一次,订阅者都会在内核输出(控制台)中打印。
我也一直在尝试在 PyQ 中复制一些类似于我在 java 客户端上看到的 q 的东西,但没有成功(https://code.kx.com/q/interfaces/java-client-for-q/)
我理想中想要实现的是:
- 运行 我在命令行中的发布者(到目前为止这是非常简单的部分)
- 有一个 python notebook 监听我的发布者发布的端口并在新提要进来时处理事件
- websocket 解决方案会很出色
有没有人对如何在 python 方面做到这一点有一些指示?有例子吗?
非常感谢, 耶尔达蒙
为了将 q 输出重定向到 Jupyter notebook,您应该为 %%q 单元魔法指定 -1(对于 stdout)和 -2(对于 stderr)选项。
I want it in a python object
您可以通过将标准流重定向到管道来捕获它们。例如,在 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。使用管道的常见注意事项适用。管道的缓冲区有限,因此您需要安排定期读取。通常,这将涉及某种超出此答案范围的事件管理。如果您不想处理这种复杂性,最好的办法是使用临时文件而不是管道。我还建议研究 "fdcap" fixture 如何在 pytest 中实现。