Java 当使用Jython时,套接字以CLOSE_WAIT结束
我在使用Jython时遇到了一些问题。 我已经实现了一个web服务,您可以上传python脚本,然后使用它们从新闻提要获取数据,等等 问题是我的服务器正在泄漏文件描述符。套接字以CLOSE_WAIT结束,然后再也不会收集垃圾。 它通常工作正常,直到新闻提要关闭,然后服务器很快就会遇到“太多打开的文件” 在我的实现中,我使用org.python.util.PythonInterpreter,但我也能够通过jyhton CLI复制它。 版本2.5.3和2.7b2都会出现相同的问题 我已经从下面的URL下载了Jython。 如果您在一个shell中运行jython CLI,然后查看另一个shell中的套接字状态,您可以看到它们最终处于CLOSE_WAIT forever状态 复制:Java 当使用Jython时,套接字以CLOSE_WAIT结束,java,python,sockets,jython,Java,Python,Sockets,Jython,我在使用Jython时遇到了一些问题。 我已经实现了一个web服务,您可以上传python脚本,然后使用它们从新闻提要获取数据,等等 问题是我的服务器正在泄漏文件描述符。套接字以CLOSE_WAIT结束,然后再也不会收集垃圾。 它通常工作正常,直到新闻提要关闭,然后服务器很快就会遇到“太多打开的文件” 在我的实现中,我使用org.python.util.PythonInterpreter,但我也能够通过jyhton CLI复制它。 版本2.5.3和2.7b2都会出现相同的问题 我已经从下面的UR
$ java -cp jython-standalone-2.5.3.jar org.python.util.jython
>>> import urllib2
>>> urllib2.urlopen('http://www.google.com/notfound')
>>> urllib2.urlopen('http://www.google.com/notfound')
>>> urllib2.urlopen('http://www.google.com/notfound')
>>> urllib2.urlopen('http://www.google.com/notfound')
>>> urllib2.urlopen('http://www.google.com/notfound')
要检查插座,请执行以下操作:
$ netstat -ant|grep CLOSE
如果有人能帮我找到解决办法,我将不胜感激
我不是问“等待”意味着什么,而是问如何解决问题
我怎样才能拿到插座的把手,这样我就可以把它关上
jython版本2.7b2也有同样的问题
$ java -cp jython-standalone-2.7-b1.jar org.python.util.jython
>>> import contextlib, urllib2
>>> u = 'http://www.google.com/notfound'
>>> with contextlib.closing(urllib2.urlopen(u)) as x:
>>> print x.read()
要使套接字脱离关闭状态,请等待,您需要关闭套接字fd 下面这样的序列在c-python中不累积fd,但在jython中累积open fd,这是正确的。我认为这与jython垃圾收集器的工作方式有关。在jython difference文档中,有一个注意事项是,像open.read这样的操作会导致问题——我怀疑这是同一个根本问题
>>> urllib2.urlopen('http://www.google.com/').close()
>>> urllib2.urlopen('http://www.google.com/').close()
>>> urllib2.urlopen('http://www.google.com/').close()
>>> urllib2.urlopen('http://www.google.com/').close()
>>> urllib2.urlopen('http://www.google.com/').close()
>>> urllib2.urlopen('http://www.google.com/').close()
解决方案是按照以下2.5语法正确处理错误条件
try:
urllib2.urlopen('http://www.google.com/not-found')
except urllib2.HTTPError, e:
e.fp.close()
这意味着远程方已将fin发送到TCP连接,但应用程序尚未通过关闭套接字对其作出响应。回答我自己的问题。 这个问题由jython开发团队解决
你能给出一个与jython一起工作的例子吗?修改为包括一个例子如果服务器回答“404未找到”,那么你的例子仍然泄漏关闭等待。试试“www.google.com/notfound”。