Веб-сервер Tornado возвращает "Нет текущего события l oop в потоке" при запуске в потоке - PullRequest
1 голос
/ 21 января 2020

Я хочу запустить веб-сервер в Tornado, а затем заняться другими делами. Я не смог обнаружить, как запустить веб-сервер в потоке. Вот что я попробовал:

import asyncio
import sys
from time import sleep

import tornado.ioloop
import tornado.web

port = 28130
context = 'tornado'
statemgr_url = 'http://localhost:%d/%s' %(port,context)

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return


if __name__ == "__main__":
    # tornado.ioloop.IOLoop.current().start()
    from tornado.platform.asyncio import AsyncIOMainLoop
    import asyncio

    def asyncListen():
        app = tornado.web.Application([(r"/%s" %context, MainHandler),])
        app.listen(port)     # THROWS exception
        AsyncIOMainLoop().install()
        asyncio.get_event_loop().run_forever()
        # asyncio.set_event_loop(asyncio.new_event_loop())

    from threading import Thread
    t = Thread(target=asyncListen) # , args=(statemgr_url, handler))
    t.start()

    sleep(1)

В строке, отмеченной THROWS Exception, происходит следующее:

  File "/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/events.py", line 644, in get_event_loop
    % threading.current_thread().name)
RuntimeError: There is no current event loop in thread 'Thread-1'.

Итак, как можно запускать / запускать веб-сервер в неосновной сети? нить?

...