Jej*_*ort -1 python asynchronous synchronous kdb qpython
我试图在查询完成后强制终止(而不是关闭)aq 会话,以节省计算机上的资源。
目前它正在使用:
conn.sendAsync("exit 0")
问题是,如果我在它之后再次运行查询(尝试重新打开连接并运行另一个查询),它可能会失败,因为之前的连接仍会被终止asynchronous。
因此,我尝试对synchronous查询执行相同的操作,但在尝试时:
conn.sendSync("exit 0")
我得到:
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
python-BaseException
Run Code Online (Sandbox Code Playgroud)
我可以指定一个超时,以便 q 会话在 10 秒后自动终止,或者也许还有另一种方法来强制终止 q 会话?
我的代码如下所示:
conn = qc.QConnection(host='localhost', port=12345, timeout=10000)
conn.open()
res = None
try:
res = conn.sendSync(query, numpy_temporals=True)
except Exception as e:
print(f'Error running {query}: {e}')
conn.sendSync("exit 0")
conn.close()
Run Code Online (Sandbox Code Playgroud)
小智 7
我建议我们退后一步,重新评估在 Python 程序运行查询后终止 KDB 进程是否真的是正确的事情。如果程序不负责启动 KDB 进程,那么很可能它不应该关闭该进程。
考虑到节省资源的理由,我相信它会在内存中保存许多数据,因此需要时间来启动。它增加了另一个原因,如果你需要第二次使用它,你不应该杀死它。
您不应该终止想要再次查询的 kdb 进程。关于您问题中的几点建议:
once my query is done to save resources-> 您可以手动调用垃圾收集来.Q.gc[]释放内存,或者更好地启用立即垃圾收集-g 1启动时启用立即垃圾收集。请注意,如果您在查询中创建大型全局变量,则该内存将不会被释放/返回。
https://code.kx.com/q/ref/dotq/#qgc-garbage-collect
https://code.kx.com/q/basics/syscmds/#g-garbage-collection-mode
killed automatically after say 10 seconds-> 如果您的目的是不允许客户端查询(例如来自 python 进程的查询)运行超过 10 秒,您可以-T 10在启动时或在进程运行时使用\T 10/设置查询超时system "T 10"
https://code.kx.com/q/basics/cmdline/#-t-timeout
| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |