ycmd_keepalive.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # Copyright (C) 2013 Google Inc.
  2. #
  3. # This file is part of YouCompleteMe.
  4. #
  5. # YouCompleteMe is free software: you can redistribute it and/or modify
  6. # it under the terms of the GNU General Public License as published by
  7. # the Free Software Foundation, either version 3 of the License, or
  8. # (at your option) any later version.
  9. #
  10. # YouCompleteMe is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with YouCompleteMe. If not, see <http://www.gnu.org/licenses/>.
  17. from __future__ import unicode_literals
  18. from __future__ import print_function
  19. from __future__ import division
  20. from __future__ import absolute_import
  21. from future import standard_library
  22. standard_library.install_aliases()
  23. from builtins import * # noqa
  24. import time
  25. from threading import Thread
  26. from ycm.client.base_request import BaseRequest
  27. # This class can be used to keep the ycmd server alive for the duration of the
  28. # life of the client. By default, ycmd shuts down if it doesn't see a request in
  29. # a while.
  30. class YcmdKeepalive( object ):
  31. def __init__( self, ping_interval_seconds = 60 * 10 ):
  32. self._keepalive_thread = Thread( target = self._ThreadMain )
  33. self._keepalive_thread.daemon = True
  34. self._ping_interval_seconds = ping_interval_seconds
  35. def Start( self ):
  36. self._keepalive_thread.start()
  37. def _ThreadMain( self ):
  38. while True:
  39. time.sleep( self._ping_interval_seconds )
  40. # We don't care if there's an intermittent problem in contacting the
  41. # server; it's fine to just skip this ping.
  42. try:
  43. BaseRequest.GetDataFromHandler( 'healthy' )
  44. except:
  45. pass