2017-01-02 67 views
1

我在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對象存在於一個進程中,但不存在於另一個進程中。 –

回答

0

您絕對不能在服務器環境中使用這樣的全局對象。你的服務器幾乎肯定有多個進程,每個進程都有自己的本地命名空間,所以定時器不會在它們之間共享。

第二個原因是您的網站可能會有多個用戶;他們都將在每個過程中訪問相同的全局變量。

我不太確定你在這裏做什麼,但做每個用戶計時器的一種方法是使用session存儲用戶點擊開始時的當前時間,然後計算與那個時候他們點擊結束。