计时器对象不可访问
问题描述:
我在Django视图中启动了Python Timer,并且正在使用另一个Django视图来取消它。但是,我发现我不能一直访问Timer对象,当我试图取消它。计时器对象不可访问
在我的“views.py”的代码如下所示:
import threading
myTimer = None
def f():
pass
def startTimer(request):
global myTimer
myTimer = threading.Timer(10000, f)
myTimer.start()
pass
def stopTimer(request):
if myTimer != None:
myTimer.cancel()
else:
print("No timer found.")
pass
当我试图取消计时器,很多时候,我得到了“没有发现计时器”。信息。经过一些尝试后,似乎以随机的方式发现Timer对象并取消成功。只有当我在服务器上运行代码时才会发生这种现象。当代码在我的本地机器上运行时,这个问题从未发生过。
答
您绝对不能在服务器环境中使用这样的全局对象。你的服务器几乎肯定有多个进程,每个进程都有自己的本地命名空间,所以定时器不会在它们之间共享。
第二个原因是您的网站可能会有多个用户;他们都将在每个过程中访问相同的全局变量。
我不太确定你在这里做什么,但做每个用户计时器的一种方法是使用session存储用户点击开始时的当前时间,然后计算与那个时候他们点击结束。
你作为服务器软件使用什么?它是否配置为以单个进程或多个进程运行?我怀疑你的服务器上有多个进程,所以Timer对象存在于一个进程中,但不存在于另一个进程中。 –