Время ожидания работника при использовании колб
Я пытаюсь поддерживать websocket в существующем приложении для укупорки колб, в котором тайм-аут Gunicorn установлен на 20 секунд. Я решил использовать удлинитель колб, и все идет хорошо, за исключением того, что грейтлет истекает через 20 секунд.
Я предполагаю, что соединение с веб-сокетом рассматривается как обычный http-запрос, поэтому ожидается, что он вернет ответ, используя время ожидания greenlet.
Я добавил следующий код и изменил gunicorn worker_class на geventwebsocket.gunicorn.workers.GeventWebSocketWorker
sockets = Sockets(app)
@sockets.route('/log')
def test_connect(socket):
while not socket.closed:
import time
time.sleep(2)
socket.send("heart beating")
Как мне справиться с этой ситуацией? Спасибо за любой совет.
добавить вывод:
Traceback (most recent call last):
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/gevent/pywsgi.py", line 508, in handle_one_response
self.run_application()
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/geventwebsocket/handler.py", line 75, in run_application
self.run_websocket()
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/geventwebsocket/handler.py", line 52, in run_websocket
list(self.application(self.environ, lambda s, h, e=None: []))
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/zeus_core/wsgi/wsgi.py", line 332, in __call__
return self.app(environ, start_response)
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/flask/app.py", line 1997, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/flask_sockets.py", line 45, in __call__
handler(environment, **values)
File "./modulepub/app.py", line 49, in test_connect
time.sleep(2)
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/gevent/hub.py", line 75, in sleep
hub.wait(loop.timer(seconds, ref=ref))
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/gevent/hub.py", line 341, in wait
result = waiter.get()
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/gevent/hub.py", line 568, in get
return self.hub.switch()
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/gevent/hub.py", line 331, in switch
return greenlet.switch(self)
Timeout: 20 seconds
1 ответ
Обнаружено, что время ожидания устанавливается используемой нами структурой. Он добавляет промежуточное программное обеспечение для приложения фляги, чтобы установить время ожидания для каждого вызова API. Изменение конфигурации времени ожидания может решить эту проблему.