[英]Halting first execution of function on second execution (Python)
我有一個 function 在頁面加載時調用,但也可以通過按鈕調用。 當頁面加載時,調用 function - 它只是等待 15 秒然后終止。 另一方面,如果用戶在 15 秒結束前按下按鈕,則再次調用 function 並立即終止。 按下此按鈕有什么方法可以停止 function 的第一次調用?
#the first execution is called with the default value for the "chosen" argument.
#the second one (on button press) is always called with a non-zero value for "chosen"
def background_calculation(self, chosen=0):
if chosen == 0:
time.sleep(15)
pos = np.random.randint(1, 54)
return pos
else:
pos = chosen
#I would like to stop the first function call from continuing to execute here.
return pos
上下文:當線程打開時調用background_calculation
。 用戶有 15 秒的時間進行選擇,如果他們不這樣做,線程應該以pos
的隨機值關閉。 另一方面,如果用戶在 15 秒結束之前做出選擇,則調用 function 並立即結束線程並返回用戶選擇的值。 目前function執行兩次,返回兩個值,用戶選擇的一個和隨機生成的一個。
我嘗試了什么:我嘗試使用指向“選擇”的最新值的指標/虛擬變量。 在 15 秒結束時,function 將檢查虛擬變量是否仍指向 0(表明所選擇的從未更改過),如果不是,則會停止。
您可能想要維護一個全局 state:
button_clicked = False
def background_calculation(self, chosen=0):
if chosen == 0:
for i in range(15):
time.sleep(1)
if button_clicked: # user clicks the button
break
else:
pos = np.random.randint(1, 54)
return pos
else: # chosen = 1
global button_clicked
button_clicked = True
pos = np.random.randint(1, 54)
return pos
請注意,此實現只是向您展示我們如何檢測按鈕單擊。
警告:直接調用這不是線程安全的。
如果您一次只需要運行一個實例,則可以使用鎖:
from threading import Lock
with Lock():
background_calculation(self, chosen=0) # or 1
如果您需要同時進行多項計算(來自多個用戶單擊按鈕),您需要在 function 內加鎖,以確保 state 設置正確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.