计时器对象不可访问

计时器对象不可访问

问题描述:

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

+1

你作为服务器软件使用什么?它是否配置为以单个进程或多个进程运行?我怀疑你的服务器上有多个进程,所以Timer对象存在于一个进程中,但不存在于另一个进程中。 –

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

第二个原因是您的网站可能会有多个用户;他们都将在每个过程中访问相同的全局变量。

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