定時任務的原理
伺服器執行乙個python指令碼
這個指令碼,迴圈執行配置的定時任務位址
python請求位址, 該位址應該返回, 下次再來執行的秒數. 也就是任務的頻率
比如任務希望每3秒執行一次, 那麼任務結束後,應該返回乙個3的數字
python指令碼拿到任務返回的數字, 算出下次執行任務的時間. 當時間條件滿足是, python指令碼會繼續訪問該任務
不同的任務, 直接修改 init裡面的配置就可以了
python指令碼如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import threading
import time
import urllib.request
import os,stat
class mythread(object):
'''多執行緒
'''def __init__(self, func_list=none,timeout=5):
self.threads =
self.rs = {}
self.timeout = timeout
self.func_list = func_list
self.start()
#封裝的執行緒函式
def trace_func(self, func, name , *args, **kwargs):
ret = func(*args, **kwargs)
self.rs[name] = ret
#執行多執行緒
def start(self):
for v in self.func_list:
if v["args"]:
lists =
for arg in v["args"]:
tuples = tuple(lists)
t = threading.thread(target=self.trace_func, args=tuples)
else:
t = threading.thread(target=self.trace_func, args=(v["func"],v["name"],))
for t in self.threads:
t.start()
for t in self.threads:
t.join()
#t.join(self.timeout)
'''執行任務
'''def task(url, last_time):
#當前時間, 最後執行時間
cur_time = int(time.time())
last_time = int(last_time)
if last_time==0:
last_time = cur_time
#滿足條件就執行任務
if cur_time>=last_time:
print("請求:%s"%(url))
try:
req = urllib.request.urlopen(url)
content = req.read()
content = str(content, 'utf-8')
content = content.strip()
if content.isdigit():
last_time += int(content)
else:
last_time += 1000
except:
print('發生了異常, 重置檔案')
init()
return last_time
'''多執行緒呼叫定時任務
'''def main():
#讀取檔案
with open("config.txt",'r') as f:
lines = f.readlines()
f.close()
#多執行緒執行
func_list =
for v in lines:
v = v.split('|')
v[1] = int(v[1])
mt = mythread(func_list)
d = mt.rs
#重新寫入檔案
content = ''
for k in d:
content += "%s|%s\n" % (k,str(d[k]))
with open("config.txt",'w') as f:
f.write(content)
f.close()
'''初始化要執行的定時任務
'''def init():
urls = [
'',''
]content = ''
for v in urls:
content += "%s|%s\n" % (v,0)
with open("config.txt",'w+') as f:
f.write(content)
f.close()
os.chmod("config.txt",stat.s_irwxu)
init()
while true:
main()
把上面**儲存為doit.py
如何把指令碼跑起來, 命令流程
安裝python3
ps -ef | grep python3
檢視是否有程序, 如果有該程序, 可以先把程序殺了
kill -9 程序號
移除 config.txt
rm -rf config.txt
編輯你的doit.py的鏈結配置
sudo vim doit.py
再將定時指令碼跑起來
nohup python3 doit.py >/dev/null 2>&1 &
ps -ef | grep python3 檢視你的任務跑起來沒有
測試反饋
在你的執行的指令碼, 列印日誌log_test()
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定時任務 下 第...