В приведенном ниже примере кода я пытаюсь создать веб-сервер с пулом потоков для обработки запроса get. В send_result () (который вызывается из потока) я использовал обратный вызов торнадо, поскольку документ говоритиспользуйте основной поток для запуска финиша или записи запроса.
Ссылка на документ по безопасности потока: http://www.tornadoweb.org/en/stable/web.html#thread-safety-notes
Если я вызываю API localhost: 4400 / , этосваливания.Я не получаю ответа от сервера
Пожалуйста, помогите мне с этим, что я делаю не так?
Заранее спасибо !!
import tornado.httpserver
import tornado.web
from tornado.ioloop import IOLoop
from tornado.web import asynchronous
from multiprocessing.dummy import Pool as ThreadPool
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r'/', DataHandler)
]
tornado.web.Application.__init__(self, handlers)
class BaseHandler(tornado.web.RequestHandler):
def handle_error(self, ex):
def to_do():
self.set_status(500)
self.finish(str(ex))
IOLoop.instance().add_callback(callback=to_do)
def send_result(self, ret_val):
def to_do():
self.set_status(200)
self.finish(ret_val)
IOLoop.instance().add_callback(callback=to_do)
class DataHandler(BaseHandler):
@asynchronous
def get(self):
def to_do():
try:
self.send_result("hi")
except Exception as ex:
self.handle_error(ex)
pool.apply_async(to_do)
pool = None
def main():
http_server = tornado.httpserver.HTTPServer(Application())
http_server.listen(4400)
global pool
pool = ThreadPool(10)
print("Server started and listening on 4400")
IOLoop.instance().start()
if __name__ == "__main__":
main()