我正在從某個數據流中讀取命令。我陷入了困境,試圖在Python中制定一個可重複使用的非阻塞倒數計時器。所以我開始了一個只有鍵盤輸入和一些基本線程的小程序來計算邏輯。我發現了一些帖子,這篇文章(How to create a trigger with threading.Timer?),這是非常有幫助的。但我需要另一部分的幫助。當值更改時只觸發線程(python)
現在我的邏輯是沿着線:「每次命令的值是1個通話開始」
如何更新我的邏輯是: 「如果命令的值是1個呼叫開始,只要命令的值保持爲1,就不要再次調用start。
所以它比一個正常的if/else更有價值的變化檢測,或者我必須跟蹤某個布爾值。去接近它
#! /usr/bin/env python
import time
import threading
import random
from random import randint
import logging
from sys import argv
logging.basicConfig(level=logging.DEBUG, format='[%(levelname)s] (%(threadName)-10s) %(message)s')
def countdown(pName,command):
print("{0} countdown - command{1} ".format(pName,command))
retry = 0
while True:
print("{0}:{1}".format(pName,retry))
retry += 1
if retry > randint(5,10):
break
time.sleep(1)
print("{0} ended".format(pName))
def start(pName,command):
print("starting countdown for: ",pName)
t = threading.Thread(target=countdown,args=(pName,command))
t.setName(pName)
t.setDaemon(True)
t.start()
if __name__ == "__main__":
while 1:
command = int(input("[1 or 2] >"))
if command == 1:
start("Salad",command)
elif command == 2:
start("Bingo",command)
這是非常暴躁的現在,但它只是第一次嘗試和解決它。
謝謝!
線程在啓動並結束時設置了一個標誌嗎?寫/讀簡單變量是線程安全的,所以只需讓主線程和子線程訪問相同的標誌。或者你可以使用線程鎖作爲你的標誌。 – 101
如果你有一分鐘請問,你可以在下面折騰一個答案嗎?當你說旗時,我在想布爾人的真假。哪些會起作用,有時會變得毛茸茸的壽。 –
DJ McMayhem的回答基本上使用內置標誌,甚至更好! – 101