Timer对象不一致可访问

时间:2017-01-02 16:32:00

标签: django python-3.x

我在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对象并取消成功。只有在服务器上运行代码时才会出现这种现象。当代码在我的本地机器上运行时,这个问题永远不会发生。

1 个答案:

答案 0 :(得分:0)

您绝不能在服务器环境中使用这样的全局对象。您的服务器几乎肯定有多个进程,每个进程都有自己的本地命名空间,因此不会在它们之间共享计时器。

第二个原因是您的网站可能有多个用户;所有这些都可以在每个进程中访问相同的全局变量。

我不确定你在这里做了什么,但是每个用户计时器的一种方法是使用session来存储用户点击开始时的当前时间,然后计算与点击结束时的差异。