Python 在辅助线程上运行任何web服务器事件循环

Python 在辅助线程上运行任何web服务器事件循环,python,multithreading,embeddedwebserver,Python,Multithreading,Embeddedwebserver,我们有一个丰富的后端应用程序,可以处理消息传递/队列、数据库查询和计算机视觉。我们需要的另一个特性是tcp通信——最好是通过http。关键是:这主要不是一个web应用程序。我们希望为不同的目的设置一组http通道。是的-我们了解消息传递,包括主题和发布-订阅:但基于tcp的直接请求/响应也有它的位置 我已经研究并试用了半打python http web服务器。它们隐式或显式地描述了在主线程上运行事件循环的需求。这对我们来说是本末倒置:main线程已经被其他任务占用,包括协调其他活动 为了说明预期

我们有一个丰富的后端应用程序,可以处理消息传递/队列、数据库查询和计算机视觉。我们需要的另一个特性是tcp通信——最好是通过http。关键是:这主要不是一个web应用程序。我们希望为不同的目的设置一组http通道。是的-我们了解消息传递,包括主题和发布-订阅:但基于tcp的直接请求/响应也有它的位置

我已经研究并试用了半打python http web服务器。它们隐式或显式地描述了在主线程上运行
事件循环的需求。这对我们来说是本末倒置:
main
线程已经被其他任务占用,包括协调其他活动

为了说明预期的结构,我将从我的
aiohttp
特定问题中提取代码。在这个问题上,我尝试在另一个独立脚本中运行,但在从属线程上:

def runWebapp():
  from aiohttp import web

  async def handle(request):
      name = request.match_info.get('name', "Anonymous")
      text = "Hello, " + name
      return web.Response(text=text)

  app = web.Application()
  app.add_routes([web.get('/', handle),
                  web.get('/{name}', handle)])
  web.run_app(app)

if __name__ == '__main__':
  from threading import Thread
  t = Thread(target=runWebapp)
  t.start()
  print('thread started let''s nap..')
  import time
  time.sleep(50)
这会产生以下错误:

RuntimeError: There is no current event loop in thread 'Thread-1'.
这个错误的意思是“嘿,你没有在
main
线程上运行这个”

我们可以在逻辑上用其他web服务器替换
aiohttp
。这种要求web服务器的事件处理循环在辅助线程上运行的方法是否适用?到目前为止,我还尝试了
cherrypy
tornado
flask

请注意,我没有尝试过的一个突出的Web服务器是
django
。但这似乎需要围绕
django
的预期目录结构(/required?)对应用程序进行广泛的重组。我们不希望这样做,因为应用程序有一系列其他用途,可以取代使用http服务器的附带展示

我看过的一种方法是
asyncio
。我不知道它是否能够支持在一个侧线程上运行事件循环:如果是这样的话,这将是这个问题的答案

在任何情况下,是否有任何web服务器明确支持其事件循环脱离主线程