python的執行緒有乙個類叫timer可以,用來建立定時任務,但是它的問題是只能執行一次,如果要重複執行,則只能在任務中再呼叫一次timer,但這樣就存在新的問題了,就是在主程序退出後,不能正常退出子執行緒。
from threading import timer
def scheduletaskwrap():
pritn "in task"
timer(10, scheduletaskwrap).start()
timer(10, scheduletaskwrap).start()
象上面這樣,就可以每10秒呼叫一次執行緒,但是當你退出整個程式後,子執行緒
scheduletaskwrap
還在繼續執行,要通知它退出怎麼辦?
python的執行緒模組提供了很多辦法,什麼event,wait,lock等,這些都比較麻煩不適合這種定時任務的簡單方法。
最簡單的就是設定乙個全域性變數,然後**程中判斷它是否改變。
from threading import timer
gflag=1
def scheduletaskwrap():
global gflag
pritn "in task"
if gflag==1:
timer(10, scheduletaskwrap).start()
timer(10, scheduletaskwrap).start()
想象是美好的,你實際執行就會發現,這樣行不通,因為主程序退出後,那個全域性變數,在子執行緒中還是1,沒有改變,因為python不存在什麼退出通知之類的機制。
那沒有其他辦法了嗎?經過思考,既然程序沒有退出通知,但是類可以啊,類一般都有析構函式,可以用它來實現全域性變數的改變,於是新增了乙個類,在析構函式中把全域性變數改成0,這樣就可以了。
class timerexec():
threadhandle=0
def __init__(self,thandle):
threadhandle=thandle
def __del__(self):
global gflag
程式設計客棧 gflag=0
print u"執行緒結束",gflag
threadhandle.cancel
refreshthread=timer(10, scheduletaskwrap).start()
a=timerexec(refreshthread)
主程序中呼叫timer的地方也要新增建立類的**。
這樣就可以了。
本文標題: 解決python中定時任務執行緒無法自動退出的問題
本文位址: /jiaoben/python/252342.html
python定時任務
說明 使用python內建的模組來實現,本篇部落格只是以迴圈定時來示範,其他的可以結合crontab的風格自己設定 一 導包 from apscheduler.schedulers.blocking import blockingscheduler二 普通函式的使用 1 interval模式,功能比...
python定時任務
原文 import schedule 2 import time 3 4 def test 5 print i m working.6 def test2 7 print i m working.in job2 8 9 每10分鐘執行一次job函式 10 schedule.every 10 minu...
Python 定時任務
在專案中,我們可能遇到有定時任務的需求。其一 定時執行任務。例如每天早上 8 點定時推送早報。其二 每隔乙個時間段就執行任務。比如 每隔乙個小時提醒自己起來走動走動,避免長時間坐著。今天,我跟大家分享下 python 定時任務的實現方法。請參考 python定時任務 上 python定時任務 下 第...