mirror of https://github.com/huashengdun/webssh
Use ThreadPoolExecutor instead of Thread
parent
9fbd5d325f
commit
d22b0cdfd8
|
@ -3,12 +3,12 @@ import json
|
|||
import logging
|
||||
import socket
|
||||
import struct
|
||||
import threading
|
||||
import traceback
|
||||
import weakref
|
||||
import paramiko
|
||||
import tornado.web
|
||||
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from tornado.ioloop import IOLoop
|
||||
from tornado.options import options
|
||||
from webssh.utils import (
|
||||
|
@ -17,11 +17,6 @@ from webssh.utils import (
|
|||
)
|
||||
from webssh.worker import Worker, recycle_worker, clients
|
||||
|
||||
try:
|
||||
from concurrent.futures import Future
|
||||
except ImportError:
|
||||
from tornado.concurrent import Future
|
||||
|
||||
try:
|
||||
from json.decoder import JSONDecodeError
|
||||
except ImportError:
|
||||
|
@ -173,6 +168,8 @@ class NotFoundHandler(MixinHandler, tornado.web.ErrorHandler):
|
|||
|
||||
class IndexHandler(MixinHandler, tornado.web.RequestHandler):
|
||||
|
||||
executor = ThreadPoolExecutor()
|
||||
|
||||
def initialize(self, loop, policy, host_keys_settings):
|
||||
super(IndexHandler, self).initialize(loop)
|
||||
self.policy = policy
|
||||
|
@ -331,15 +328,6 @@ class IndexHandler(MixinHandler, tornado.web.RequestHandler):
|
|||
worker.encoding = self.get_default_encoding(ssh)
|
||||
return worker
|
||||
|
||||
def ssh_connect_wrapped(self, future, args):
|
||||
try:
|
||||
worker = self.ssh_connect(args)
|
||||
except Exception as exc:
|
||||
logging.error(traceback.format_exc())
|
||||
future.set_exception(exc)
|
||||
else:
|
||||
future.set_result(worker)
|
||||
|
||||
def check_origin(self):
|
||||
event_origin = self.get_argument('_origin', u'')
|
||||
header_origin = self.request.headers.get('Origin')
|
||||
|
@ -377,16 +365,12 @@ class IndexHandler(MixinHandler, tornado.web.RequestHandler):
|
|||
except InvalidValueError as exc:
|
||||
raise tornado.web.HTTPError(400, str(exc))
|
||||
|
||||
future = Future()
|
||||
t = threading.Thread(
|
||||
target=self.ssh_connect_wrapped, args=(future, args)
|
||||
)
|
||||
t.daemon = True
|
||||
t.start()
|
||||
future = self.executor.submit(self.ssh_connect, args)
|
||||
|
||||
try:
|
||||
worker = yield future
|
||||
except (ValueError, paramiko.SSHException) as exc:
|
||||
logging.error(traceback.format_exc())
|
||||
self.result.update(status=str(exc))
|
||||
else:
|
||||
workers = clients.setdefault(worker.src_addr[0], {})
|
||||
|
|
Loading…
Reference in New Issue