加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – gunicorn和websockets

发布时间:2020-12-20 12:19:38 所属栏目:Python 来源:网络整理
导读:我正在尝试让 http://www.gelens.org/code/gevent-websocket/运行并继续收到以下错误. socket_id=1 already closed. result = self._run(*self.args,**self.kwargs) File "/home/walt/virtualenv/ws/local/lib/python2.7/site-packages/gevent/pywsgi.py",li
我正在尝试让 http://www.gelens.org/code/gevent-websocket/运行并继续收到以下错误.

socket_id=1 already closed.
    result = self._run(*self.args,**self.kwargs)
  File "/home/walt/virtualenv/ws/local/lib/python2.7/site-packages/gevent/pywsgi.py",line 571,in handle
    handler.handle()
  File "/home/walt/virtualenv/ws/local/lib/python2.7/site-packages/gevent/pywsgi.py",line 180,in handle
    result = self.handle_one_request()
  File "/home/walt/virtualenv/ws/local/lib/python2.7/site-packages/gevent/pywsgi.py",line 314,in handle_one_request
    self.handle_one_response()
  File "/home/walt/virtualenv/ws/local/lib/python2.7/site-packages/geventwebsocket/handler.py",line 26,in handle_one_response
    return self._handle_websocket()
  File "/home/walt/virtualenv/ws/local/lib/python2.7/site-packages/geventwebsocket/handler.py",line 50,in _handle_websocket
    self.log_request()
  File "/home/walt/virtualenv/ws/local/lib/python2.7/site-packages/gevent/pywsgi.py",line 394,in log_request
    log.write(self.format_request() + 'n')
AttributeError: 'Logger' object has no attribute 'write'

我在Mint Linux上运行python 2.7.2

解决方法

当运行gunicorn -k“geventwebsocket.gunicorn.workers.GeventWebSocketWorker”示例时,我得到了与gevent-websocket 0.3.4和gevent 0.13.6相同的错误:app example.

问题来自于gevent和gunicorn之间的期望不匹配. Gevent的pywsgi模块需要一个实现write方法的logger对象,比如文件对象,stdout等.然而,Gunicorn传入一个拥有Logger个方法的对象(调试,信息,错误,关键,警告等).

pywsgi中的问题代码:

def log_request(self):
    log = self.server.log
    if log:
        log.write(self.format_request() + 'n')

为了解决这个问题,我在gevent的一个分支中修改了行,并将它们改为以下内容:

def log_request(self):
    log = self.server.log
    if log:
        if hasattr(log,"info"):
            log.info(self.format_request() + 'n')
        else:
            log.write(self.format_request() + 'n')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读