2014-11-29 3 views
0

저는 웹 개발에 익숙하지 않습니다. cherrypy를 처음 사용하기.CherryPy에서 다른 스레드를 만드는 방법은 무엇입니까?

import cherrypy 
import src.main 

class Interface: 

    def __init__(self): 
     self.mypf = src.main.pf() 

    commonhtmlString = """<form method="get" action="generate"> 
      <input type="text" value="" name="l" /> 
      <input type="text" value="" name="r" /> 
      <button type="submit">Give it now!</button> 
      </form>""" 

    @cherrypy.expose 
    def index(self): 
     return Interface.commonhtmlString 

    @cherrypy.expose 
    def generate(self, l, r): 
     self.mypf = src.main.pf() 
     self.mypf.getLocalityInfo(l, r) 
     return Interface.commonhtmlString + self.mypf.printC() 

    @cherrypy.expose 
    def explore(self, c): 
     return Interface.commonhtmlString + self.mypf.printIC(c) 

cherrypy.quickstart(Interface()) 

위의 코드는 정상적으로 작동합니다. 그러나 새 브라우저 또는 새 탭을 열고 매개 변수를 변경하고 새 출력을 생성하면 열려있는 모든 링크와 오류가 발생합니다.

Exm. 내가 l = x r = xx라고 입력하면 xxx라는 결과를 얻습니다. 이제 다른 탭에서 URL을 열고 l = y r = yy를 입력하면 결과가 yyy가됩니다. 이제는 이전 탭이 xxx에 유지되지 않습니다. 따라서 xxx에서 일부 링크를 클릭하면 yyy 해당 링크 나 오류가 발생합니다.

누군가가이 문제에 도움을 줄 수 있습니까? 외부 링크 나 개념을 설명하거나 제공 할 수 있습니다. 읽을 준비가되었습니다. 미리 감사드립니다.

+1

어떤 링크를 참조하고 무엇이'pf'인지는 명확하지 않습니다. 대부분의 경우,'Interface' 인스턴스는 한 번만 생성되고 요청간에 데이터를 유지한다는 사실을 알지 못합니다. 전역 데이터에 대한 스레드 안전성을 보장해야합니다. 도움이되지 않으면 실행 가능한 코드로 질문을 편집하십시오. – jwalker

답변

0

코드에서 제출 한 데이터로 무엇을하는지 볼 수 없습니다. 제출 된 값을 서버의 변수/데이터 저장소에 저장하는 것 같습니다. 해당 변수의 복사본이 하나뿐이므로 사용자는 서로의 복사본을 덮어 씁니다. 작은 데이터베이스를 만들고 각 사용자의 입력을 저장하는 것을 고려할 수 있습니다 (사용자를 구분할 수있는 방법이있는 경우). 또는 사용자 세션에 데이터를 저장하고 페이지를 보거나 새로 고칠 때마다 참조 할 수 있습니다.

http://docs.cherrypy.org/en/latest/pkg/cherrypy.lib.html?highlight=session#module-cherrypy.lib.sessions