2017-03-11 2 views
0

저는 웹 개발자에게 매우 익숙합니다. 데이터를 새로 고치기 위해 Ajax 호출로 간단한 웹 인터페이스를 구축하고, 백엔드로 turbogears2를 구축하려고합니다.turbogears2와의 동시 요청

내 Ajax 호출이 잘 작동하고 Turbogears2 서버에 주기적으로 호출하지만 이러한 호출에는 완료 시간이 필요합니다 (일부 요청은 서버가 다른 시스템에서 원격 SSH 호출을 사용하도록 만듭니다. 완전한).

내 문제는 TurboGears가 다음 요청을 처리하기 전에 각 요청이 완료 될 때까지 대기하므로 모든 동시 Ajax 호출이 모두 병렬 처리되는 대신 대기열에 대기한다는 것입니다. N 값을 새로 고치려면 3 * N 초가 걸릴 수 있습니다. 여기서 동시성은 3 초가 걸릴 수 있습니다.

어떻게 해결할 수 있습니까?

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 서버로 요청을 처리하고 있다는 사실로 인해 발생 :

여기 (방법 get_load 아약스 호출 사람은) 나의 현재의 서버 측 코드입니다. 기본적으로 wsgiref 서버는 단일 스레드이므로 한 번에 하나의 요청을 처리 할 수 ​​있습니다. 이는 development.ini서버 섹션 (IP 주소와 포트도 지정되어 있음)에 wsgiref.threaded = true 구성 옵션을 제공하여 변경할 수 있습니다. 자세한 내용은 https://github.com/TurboGears/gearbox#gearbox-http-servershttp://turbogears.readthedocs.io/en/latest/turbogears/gearbox.html#changing-http-server을 참조하십시오.

wsgiref은 TurboGears 용 개발 서버이며 일반적으로 프로덕션 환경에서 사용하지 않는 것이 좋습니다. 응용 프로그램을 배포 할 때 waitress, chaussette 또는 mod_wsgi와 같은 것을 사용하는 것을 고려해야합니다 (http://turbogears.readthedocs.io/en/latest/cookbook/deploy/index.html?highlight=deploy

참조).