终止CycAPI Cyc连接的首选方法是什么?

Cyc API示例代码页面的Cyc API示例代码中,使用了System.exit()来终止Cyc连接。一般来说,这似乎是用大锤子来敲碎一个鸡蛋。是否有更有针对性的方法来终止维护Cyc连接的线程,以便简单地执行到main方法的末尾(例如)就能使程序终止?


回答:

(免责声明:我是Cyc APIs的开发者之一…)

在早期版本的Cyc Core APIs中,终止连接比实际需要的要困难,但1.0.0-rc4版本发布了一些功能来解决这个问题。

Session API的SessionManager最终负责监督连接池管理。连接可以在多个会话中重用,在大多数情况下,您不需要直接创建、缓存或关闭到Cyc服务器的连接。其理由是:底层的CycAccess连接实际上相当重量级(创建一个可能需要100毫秒或更长时间),所以您不想随意终止它们,并且您可能不想在例如多线程环境(如servlet)中直接管理它们。

通常,当您完成使用时,只需关闭单个CycSession;一旦没有资源依赖于它,SessionManager将关闭底层连接。CycSession接口扩展了java.io.Closeable,因此您可以执行以下操作:

try {  // 对KB API、Query API等的一些调用...} finally {  CycSessionManager.getCurrentSession().close();}

在Java 7及更高版本中,这意味着CycSessions实现了java.lang.AutoCloseable,因此您可以将它们包装在try-with-resources语句中:

try (CycSession session = CycSessionManager.getCurrentSession()) {  // 对KB API、Query API等的一些调用...}// 会话已自动关闭。下一次调用将返回一个新会话:CycSession newSession = CycSessionManager.getCurrentSession();

还可以关闭SessionManager,强制它关闭所有连接。这在例如退出应用程序时很有用:

public static void main(String[] args) throws IOException {  try (SessionManager sessionMgr = CycSessionManager.getInstance()) {    // 对KB API、Query API等的一些调用...  }}

或者,您可以手动关闭它:

try {  // 对KB API、Query API等的一些调用...} finally {  CycSessionManager.getInstance().close();}

一旦SessionManager实例被关闭,就不能再用来创建或检索会话。然而,您可以指示CycSessionManager加载一个新的SessionManager实例:

CycSessionManager.getInstance().close();CycSessionManager.getInstance().isClosed(); // trueCycSessionManager.reloadInstance();CycSessionManager.getInstance().isClosed(); // false

实际上,在调用CycSessionManager#reloadInstance()之前调用SessionManager#close()是多余的(尽管无害);reloadInstance确保在替换之前关闭了之前的SessionManager。无论如何,我通常不建议编写严重依赖于重新加载SessionManager的代码(出于上述原因),但如果需要,它就在那里。

这就是它的要点。这里有进一步的文档:http://dev.cyc.com/api/core/session/connection-management/

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注