2017-09-27 17 views
0

지금은 잠시 동안 검색했지만 답변을 찾을 수 없습니다. cherrypy가 요청 (GET, PUT, POST, DELETE 등)을 처리하기위한 새로운 스레드를 생성한다는 것을 알고 있습니다.Cherrypy_handling requests

지금 나는이 같은 매개 변수를 가져 오기 :

... 
@cherrypy.tools.json_in() 
@cherrypy.tools.json_out() 
def POST(self): 
    Forum.lock_post.acquire() 
    conn = self.io.psqlConnect(self.dict_psql) 
    cur = conn.cursor(cursor_factory = psycopg2.extras.RealDictCursor) 
    params = cherrypy.request.json 
    ... 
    return some_dict 

당신이 변수 PARAMS에 경쟁 조건을 방지하기 위해 스레드를 잠금 메신저를 볼 수 있듯이. 그러나 이것이 정말로 필요한가? 나는 POST에서 다른 모든 요청이 기다려야 할 것 같은이 일을한다면 내가 묻는다. 전체 POST를 잠그지 않고 더 좋은 해결책이 있습니까? 나는 매개 변수을 코드를 따라 여러 번 사용하고 있습니다.

답변

2

먼저 CherryPy는 각 요청에 대해 새 스레드를 만들지 않으며 미리 정의 된 스레드 풀 (기본적으로 10 개)이 있으며 실제로는 한 번에 하나의 스레드 만 단일 요청을 처리 할 수 ​​있습니다.

cherrypy.request.json을 잠 가야하는지 여부. 실제로는 그렇지 않습니다. "thread locals"라는 개념이 있습니다.이 개념에서는 어떤 스레드가 그러한 객체에 액세스하고 있는지에 따라 다른 객체에 대한 다중 참조를 가질 수 있습니다. (python docs).

그렇다면 ... 작성한 코드가 다른 스레드의 상태를 방해하지 않는지 확인해야합니다 (cherrypy.thread_data을 빠른 수정으로 사용할 수 있음).

cherrypy 플러그인 아키텍처를 살펴보십시오. 스레드간에 자원을 공유하려면 보통 플러그인을 사용하십시오. http://docs.cherrypy.org/en/latest/extend.html#plugins