python版 定時任務機制

2022-07-18 14:33:33 字數 3046 閱讀 7982

定時任務的原理

伺服器執行乙個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定時任務 下 第...