首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >问: KDB+/PyQ发布者订阅者,在python对象中提供feed

问: KDB+/PyQ发布者订阅者,在python对象中提供feed
EN

Stack Overflow用户
提问于 2018-07-12 00:25:35
回答 1查看 477关注 0票数 2

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

只要它是纯Q相关的,一切都运行得很好。

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

我还试图在PyQ中复制一些类似于我在Q的java客户端上看到的东西(https://code.kx.com/q/interfaces/java-client-for-q/),但没有太大成功。

我理想情况下想要实现的是:

  • 在命令行中运行我的publisher (到目前为止,这是非常简单的部分)
  • 有一个python笔记本,它可以侦听publisher发布和处理事件的端口,当新的提要进入
  • 时,websocket解决方案将是

有没有人有一些关于如何在python方面做到这一点的建议?有什么例子吗?

非常感谢,Yael

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-13 08:20:45

为了将Q输出重定向到Jupyter notebook,您应该为%%q单元魔术指定-1 (对于stdout)和-2 (对于stderr)选项。

我想把它放在

对象中

您可以通过将标准流重定向到管道来捕获标准流。例如,在Linux上,您可以这样做

代码语言:javascript
复制
>>> 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中实现的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51290256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档