有乙個執行緒,它執行的是乙個無線迴圈的任務當這個執行緒長時間沒有收到外界的訊息的時候,自動停止。
這個時候我們需要乙個定時器自動的去計時
比如 超過5秒沒有收到訊息,則停止。
如果5秒內收到了訊息,這個5秒需要被重置,重新計算乙個5秒。
import threading
import queue
import time
# 定時器觸發時,執行的函式,停止程序
def stop_server(server):
server.stop()
print("timer -> stop the server ")
# 例項化定時器
def newtimer(server):
timer = threading.timer(5,stop_server,(server,))
return timer
# 重置定時器,如果我們輸入了內容,則定時器會執行cancel() 和 start(),定時器時間被重置了
def send_msg():
global msg_queue
while true:
msg = input("請輸入要傳送的訊息\n")
if msg == "break":
break
msg_queue.put(msg)
print("success send message ->",msg)
# 我們的執行緒
class server:
def __init__(self):
self._running = true
def stop(self):
# (這裡停止程序,python沒有對應的api,我們通過迴圈,根據判斷條件決定是否退出)
print("server stop")
self._running = false
def run(self,name):
global msg_queue,server,timer
print(name,"is running ....")
while self._running: # 迴圈的判斷條件
try:
msg = msg_queue.get(timeout=5)
print("success receive messages ->",msg)
# ------- 接收到訊息後,重置定時器 ------------------
timer.cancel()
timer = newtimer(server) # 取消後定時器就不能用了,必須再次例項化
timer.start()
print("timer 定時器被重置")
except queue.empty as e:
print("queue get timeout,請輸入break退出")
if __name__ == "__main__":
# ---------------- 建立乙個 傳送和接受訊息的佇列 ------------------
msg_queue = queue.queue(5)
# ---------------- 啟動執行緒-------------------------------------
server = server()
task = threading.thread(target=server.run, args=("msg-server",))
task.start()
# ---------------- 啟動定時器 ---------------------------------
# timer = threading.timer(5,stop_server,(server,))
# timer.start()
timer = newtimer(server)
timer.start()
# ---------------- 向訊息佇列中傳送訊息---------------------------------
send_msg()
# ---------------- 阻塞 ----------------
# 其實不用這一步也可以,畢竟我們的listen_timer本身就阻塞住了,主線程不會退出。
task.join()
Android 定時器的實現和停止
一 採用handle與執行緒的sleep long 方法 1.定義乙個handler類,用於處理接受到的message handler handler new handler 2.新建乙個實現runnable介面的執行緒類,如下 public class mythread implements ru...
Python的定時器
在實際應用中,我們經常需要使用定時器去觸發一些事件。p ython中通過執行緒實現定時器timer,其使用非常簡單。看示例 importthreading deffun timer print hello timer timer threading.timer 1 fun timer timer.s...
python 迴圈定時器
有時候需要迴圈執行某個任務,最簡單的就是用thread.timer.谷歌了一下,發現大家竟然用sleep 來實現迴圈,也不知道誰想的這個方法,竟然很少有人想到join一下,很奇怪。coding utf 8 created on 2016年4月25日 author 55haitao import th...