在服务器上运行Stanford,今日无法启动"StanfordCoreNLP"了,就是运行下面代码一直在运行,不结束,不报错。
from stanfordcorenlp import StanfordCoreNLP
std_nlp = StanfordCoreNLP('/data/stanford-corenlp-4.2.0')
最后找到原因:后台启动的相关java服务太多了。
原因解释
StandordCoreNLP底层是Java编写的,在Python生成StanfordCoreNLP实例对象时,这个包会在后台启动一个java服务,供对象调用。但是,启动的服务不一定会被关掉,当服务启动的太多,到了一定数量时,就无法启动新的服务,也就出现不结束,不报错的奇怪现象。
解决方法
找到相关服务并杀死就好了,linux下,借助ps
命令搜索相关的java服务,如下:
ps -ef | grep java
找到服务的进程ID,然后使用kill -9 进程ID
杀死多余服务,OK!
- 也可以用下
wget "localhost:9000/shutdown?key=`cat /tmp/corenlp.shutdown`" -O -
- 最佳方式,开一个进程,每次都用这个进程就好
std_nlp = StanfordCoreNLP('http://localhost', port=9000)