解決Python中定時任務執行緒無法自動退出的問題

2022-09-27 11:06:10 字數 1346 閱讀 1867

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定時任務 下 第...