CherryPy, потоки и переменные-члены; потенциальные проблемы?
Допустим, у меня есть следующий простой класс:
import cherrypy
import os
class test:
test_member = 0;
def __init__(self):
return
def index(self):
self.test_member = self.test_member + 1
return str(self.test_member)
index.exposed = True
conf = os.path.join(os.path.dirname(__file__), 'config.ini')
if __name__ == '__main__':
# CherryPy always starts with app.root when trying to map request URIs
# to objects, so we need to mount a request handler root. A request
# to '/' will be mapped to HelloWorld().index().
cherrypy.config.update({'server.socket_host': '0.0.0.0'})
cherrypy.quickstart(test(), config=conf)
else:
# This branch is for the test suite; you can ignore it.
cherrypy.config.update({'server.socket_host': '0.0.0.0'})
cherrypy.tree.mount(test(), config=conf)
Поэтому, когда я открываю свою индексную страницу в первый раз, я возвращаюсь 1, в следующий раз 2, затем 3, 4 и так далее. Мои вопросы:
Are there any big dangers with this, particularly with threads and multiple people accessing the page at the same time? Do I have to lock the member variable in some way each time it's written to in order to prevent issues? Does anything change if I'm using a none basic data type as a member (such as my own, complicated class) rather than something as simple as an integer?Я не совсем понимаю, как работает многопоточность с CherryPy, я полагаю, что в этом простом примере меня беспокоит то, что в одном потоке test_member может быть равен одной вещи, а при доступе из другого потока это будет нечто совершенно иное. Я заранее прошу прощения, если я пропустил что-то, что хорошо задокументировано, но некоторые поиски в Google не смогли найти то, что я искал. Я понимаю, что для такого простого примера есть несколько относительно простых путей, которые могли бы решить потенциальные проблемы здесь (сохранить состояние переменной в базе данных или что-то в этом духе), но это не сработает в моем реальном случае использования. ,