2017-03-11 51 views
0

同時請求我很新的Web開發,我試圖建立一個簡單的Web界面與Ajax調用刷新數據,並turbogears2作爲後端。與turbogears2

我Ajax調用做工精細,使我Turbogears2服務器定期調用,但是這些調用需要時間來完成(一些請求使服務器使用其它機器上,這需要長達3-4秒的SSH遠程調用完成)。

我的問題是TurboGears的等待每個請求處理下一個之前完成,所以我所有的併發Ajax調用正在排隊,而不是被並行處理所有。 要刷新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 

回答

1

你的問題可能是由您與變速箱wsgiref服務器服務請求的事實引起的。默認情況下,wsgiref服務器是單線程的,因此可以在一次提供單個請求。可以通過在您的development.ini服務器部分中提供wsgiref.threaded = true配置選項(與指定IP地址和端口相同)來更改此項。有關更多詳細信息,請參閱https://github.com/TurboGears/gearbox#gearbox-http-servershttp://turbogears.readthedocs.io/en/latest/turbogears/gearbox.html#changing-http-server

注意wsgiref是TurboGears的開發服務器和使用上的生產一般氣餒。在部署應用程序時,您應該考慮使用類似女服務員,chaussette或mod_wsgi的內容,請參閱http://turbogears.readthedocs.io/en/latest/cookbook/deploy/index.html?highlight=deploy