turbogears2 的同时请求

Simultaneous requests with turbogears2

我是 Web 开发的新手,我正在尝试构建一个简单的 Web 界面,其中包含 Ajax 调用以刷新数据,并将 turbogears2 作为后端。

我的 Ajax 调用工作正常并定期调用我的 Turbogears2 服务器,但是这些调用需要时间才能完成(一些请求使服务器在其他机器上使用远程 SSH 调用,这最多需要3-4 秒完成)。

我的问题是 TurboGears 在处理下一个请求之前等待每个请求完成,因此我的所有并发 [​​=22=] 调用都在排队,而不是全部并行处理。 刷新 N 个值需要 3*N 秒,而并发只需 3 秒。

知道如何解决这个问题吗?

这是我当前的服务器端代码(方法 get_load 是用 Ajax 调用的代码):

class RootController(TGController):
@expose()
def index(self):
    with open ("index.html") as data:
        index = data.read()
    return index


@expose()
def get_load(self, ip):
    command = "bash get_cpu_load.sh"
    request = subprocess.Popen(["ssh", "-o ConnectTimeout=2", ip, command])
    load = str(request.communicate()[0])
    return load

您的问题可能是由于您正在使用 Gearbox wsgiref 服务器处理请求。默认情况下,wsgiref 服务器是单线程的,因此一次可以处理单个请求。这可以通过在 development.ini server 部分中提供 wsgiref.threaded = true 配置选项来更改(与指定的 IP 地址和端口相同)。有关详细信息,请参阅 https://github.com/TurboGears/gearbox#gearbox-http-servers and http://turbogears.readthedocs.io/en/latest/turbogears/gearbox.html#changing-http-server

请注意,wsgiref 是 TurboGears 的开发服务器,通常不鼓励在生产环境中使用。在部署应用程序时,您应该考虑使用女服务员、长袍或 mod_wsgi 之类的东西,请参阅 http://turbogears.readthedocs.io/en/latest/cookbook/deploy/index.html?highlight=deploy