我有一个我一直在工作的webApp,我注意到每隔一段时间我就会看到一个错误“线程CP服务器线程中的异常-*”,其中*=随机线程number.This错误偶尔会发生,最终会锁定web服务器,阻止它响应请求。
我用一个默认的"hello World“webPy应用程序重现了同样的问题,该应用程序使用CherryPy来支持SSL。
import web
from web.wsgiserver import CherryPyWSGIServer
# GLOBALS
CherryPyWSGIServer.ssl_certificate = "/.ssl/fpi.crt"
CherryPyWSGIServer.ssl_private_key = "/.ssl/server.key"
urls = (
'/(.*)', 'Hello',
)
app = web.application(urls, globals())
class Hello:
def GET(self, name):
return 'Hello World'
if __name__ == "__main__":
app.run()错误是:
73.220.196.76:63982 - - [27/Nov/2018 06:56:50] "HTTP/1.1 GET /" - 200 OK
73.220.196.76:63982 - - [27/Nov/2018 06:56:50] "HTTP/1.1 GET /favicon.ico" - 200 OK
Exception in thread CP Server Thread-9:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
File "/home/brian_barnes/.local/lib/python2.7/site-packages/web/wsgiserver/__init__.py", line 1375, in run
conn.communicate()
File "/home/brian_barnes/.local/lib/python2.7/site-packages/web/wsgiserver/__init__.py", line 1269, in communicate
format_exc())
File "/home/brian_barnes/.local/lib/python2.7/site-packages/web/wsgiserver/__init__.py", line 811, in simple_response
self.conn.wfile.sendall("".join(buf))
File "/home/brian_barnes/.local/lib/python2.7/site-packages/web/wsgiserver/ssl_pyopenssl.py", line 111, in sendall
*args, **kwargs)
File "/home/brian_barnes/.local/lib/python2.7/site-packages/web/wsgiserver/ssl_pyopenssl.py", line 61, in _safe_call
return call(*args, **kwargs)
File "/home/brian_barnes/.local/lib/python2.7/site-packages/web/wsgiserver/__init__.py", line 913, in sendall
bytes_sent = self.send(data)
File "/home/brian_barnes/.local/lib/python2.7/site-packages/web/wsgiserver/ssl_pyopenssl.py", line 115, in send
*args, **kwargs)
File "/home/brian_barnes/.local/lib/python2.7/site-packages/web/wsgiserver/ssl_pyopenssl.py", line 77, in _safe_call
raise socket.error(errnum)
error: -1环境: Ubuntu 18.04.1 LTS Python 2.7.15rc1 web.py: 0.39
有没有人看到过这样的问题,或者知道是什么导致了它。在webpy.org上阅读时。这似乎是0.36版本的一个问题,但在0.37版本中应该很好。我曾想过要升级到0.40,但因为它还在开发中,所以犹豫不决。
发布于 2019-03-06 04:51:13
这可能不是一个适当的修复,但我进行了以下黑客攻击,这个问题不再出现在我身上。我仍然在寻找一种更好的解决方案--也许完全抛弃CherryPy --但在那之前:
ssl_pyopenssl.py中def _safe_call中的====>:替换
raise socket.error(errnum)使用
#### raise socket.error(errnum)
import sys
sys.stderr.write('===> ssl_pyopenssl: ignoring socket error' + str(errnum) + '\n')
return ""
####以及用于raise socket.error(-1)和raise wsgiserver.FatalSSLAlert(*e.args)的类似补丁程序
====> in def sendall in wsgiserver2.py:插入2行如下:
bytes_sent = self.send(data)
### insert the below two lines
if not bytes_sent: # hack b/c self.send has unhandled exceptions
break
### end insert
data = data[bytes_sent:]将有兴趣听到使用上面的任何问题
https://stackoverflow.com/questions/53506190
复制相似问题