我在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
当我尝试取消计时器时,很多次,我得到了#34;没有找到计时器。"信息。经过一些尝试,似乎以随机方式,找到Timer对象并取消成功。只有在服务器上运行代码时才会出现这种现象。当代码在我的本地机器上运行时,这个问题永远不会发生。
答案 0 :(得分:0)
您绝不能在服务器环境中使用这样的全局对象。您的服务器几乎肯定有多个进程,每个进程都有自己的本地命名空间,因此不会在它们之间共享计时器。
第二个原因是您的网站可能有多个用户;所有这些都可以在每个进程中访问相同的全局变量。
我不确定你在这里做了什么,但是每个用户计时器的一种方法是使用session来存储用户点击开始时的当前时间,然后计算与点击结束时的差异。