2013-10-04 1 views
1

Я изо всех сил стараюсь делать сеансы черри, чтобы делать то, что я хотел бы. У меня есть приложение, которое взаимодействует с отдельными чатами с пользователем (каждый диалог имеет уникальный dlg_nbr). Кажется, что он работает нормально (см. Первые два цикла в выходном журнале ниже) до тех пор, пока отдельные диалоги не будут смешаны (когда я отправляю сообщение одновременно), а user1 начинает получать ответы, направленные на user2 (третий цикл в выходном логе), прежде чем ответы пользователя2 будут обработанный.Как сохранить вихревые сеансы отличными друг от друга

Я бы подумал, что если моя основная функция (think()) использует и возвращает dlg_nbr, уникальный для каждого пользователя, который я храню как session [dlg_nbr], это обеспечит непрерывность в циклах ответа/запроса, сеанс уникален для каждого пользователя, не так ли?

Я понимаю, что многопоточность черешни может означать, что все происходит в паралелле, но, конечно, сеансы не должны смешиваться? Это сводит меня с ума, это черта в черри, что я делаю неправильно?

CherryPy код

class Web: 

    def rsp(self, stm=''): 

     print ' 10 SESSION ID ON REQUEST', cherrypy.session.id 
     dlg_nbr = cherrypy.session.get('dlg_nbr') 

     # main logic of app 
     rsp, dlg_nbr = B.think(stm, dlg_nbr) 

     print ' 20 SESSION ID AFTER PROCESSING REQUEST', cherrypy.session.id 
     cherrypy.session['dlg_nbr'] = dlg_nbr 

    return rsp 

if __name__ == '__main__': 
    cherrypy.config.update(
     {'server.socket_host': config.HOST, 
     'server.socket_port': config.PORT}) 

    STATIC_DIR = os.path.join(os.path.abspath("."), u"static") 
    dev_config = { 
     '/': {'tools.caching.on': False, 'tools.sessions.on': True}, 
     '/static': {'tools.staticdir.on': True, 
     'tools.staticdir.dir': STATIC_DIR}} 

    cherrypy.quickstart(Web(), config=dev_config) 

Аякса сообщение:

$.ajax({ 
      url: '/rsp', 
      data: {stm: input_string}, 
      type: "POST", 
      timeout: 10000, 
      success: function(response) {......} 

выход журнала:

# Expected result for remote user 
192.168.1.2 - - [04/Oct/2013:23:22:05] "POST /rsp HTTP/1.1" 200 65 "http://192.168.1.4:8003/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36" 
    10 SESSION ID ON REQUEST 6125bf1b113e2da09e4653e8eccf0bd3b7240ddb 
    20 SESSION ID AFTER PROCESSING REQUEST 6125bf1b113e2da09e4653e8eccf0bd3b7240ddb 

# Expected result for localhost 
127.0.0.1 - - [04/Oct/2013:23:22:09] "POST /rsp HTTP/1.1" 200 8 "http://localhost:8003/" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36" 
    10 SESSION ID ON REQUEST d09998f541d6a19742b8d73314a1dba6bba42a84 
    20 SESSION ID AFTER PROCESSING REQUEST d09998f541d6a19742b8d73314a1dba6bba42a84 

# Local host seems to get result of post made by remote user (when submitting stm at the same time) 
192.168.1.2 - - [04/Oct/2013:23:22:14] "POST /rsp HTTP/1.1" 200 33 "http://192.168.1.4:8003/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36" 
    10 SESSION ID ON REQUEST 6125bf1b113e2da09e4653e8eccf0bd3b7240ddb 
    10 SESSION ID ON REQUEST d09998f541d6a19742b8d73314a1dba6bba42a84 
    20 SESSION ID AFTER PROCESSING REQUEST 6125bf1b113e2da09e4653e8eccf0bd3b7240ddb 

# finally remote user gets expected result, (but seems out of synch) 
127.0.0.1 - - [04/Oct/2013:23:22:19] "POST /rsp HTTP/1.1" 200 17 "http://localhost:8003/" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36" 
    20 SESSION ID AFTER PROCESSING REQUEST d09998f541d6a19742b8d73314a1dba6bba42a84 

ответ

1

I фиксируем Это сейчас. Для удобства я присваивал значения временной глобальной переменной. Кажется, что они разделены между несколькими потоками cherrypy. Решение состояло в том, чтобы не использовать глобальные переменные, но явно объявлять переменные в локальной области. Сейчас отлично работает

 Смежные вопросы

  • Нет связанных вопросов^_^