【发布时间】:2019-01-25 02:44:21
【问题描述】:
在我在pythonanywhere 上运行的Bottle 应用程序中,我希望在请求之间保留对象。
如果我这样写:
X = {'count': 0}
@route('/count')
def count():
X['count'] += 1
tpl = SimpleTemplate('Hello {{count}}!')
return tpl.render(count=X['count'])
计数增加,这意味着 X 在请求之间持续存在。
我目前在pythonanywhere 上运行它,这是一个托管服务,我无法控制 Web 服务器(我猜是 nginx?)线程、负载平衡(如果有的话)等......
我的问题是,这是巧合吗,因为它只使用一个线程,而我做测试的负载最小?
更一般地说,这将在什么时候停止工作?例如。我有多个线程/套接字/实例/负载平衡服务器等...?
除此之外,即使我必须迁移到准系统服务器,我最好的选择是什么(坚持使用 Bottle)。
以下是Bottle docs 对他们的 request 对象的评价:
LocalRequest 的线程安全实例。如果从请求回调中访问,此实例始终引用当前请求(即使在多线程服务器上)。
但我不完全理解这意味着什么,或者像我使用的全局变量这样的全局变量在多线程方面的位置。
【问题讨论】:
-
如果你有多个instance(实际上是process),它就会停止工作。这是通过进程共享变量。
-
对于
request对象,我相信这不是您想要的。因为您想在多个请求之间保持不变。
标签: python multithreading thread-safety bottle