日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Python循环定时服务功能(相似contrab)

發布時間:2023/12/20 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python循环定时服务功能(相似contrab) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python實現的循環定時服務功能。類似于Linux下的contrab功能。主要通過定時器實現。

注:Python中的threading.timer是基于線程實現的。每次定時事件產生時?;卣{完響應函數后線程就結束。而Python中的線程是不能restart的,所以這樣的循環定時功能必需要在每次定時響應完畢后再又一次啟動還有一個定時事件。

#!/usr/bin/env python # -*- coding: utf-8 -*- #import subprocess from threading import Timer import time import os import sysif os.name == 'posix':def become_daemon(our_home_dir='.', out_log='/dev/null',err_log='/dev/null', umask=0o022):"Robustly turn into a UNIX daemon, running in our_home_dir."# First forktry:if os.fork() > 0:sys.exit(0) # kill off parentexcept OSError as e:sys.stderr.write("fork #1 failed: (%d) %s\n" % (e.errno, e.strerror))sys.exit(1)os.setsid()os.chdir(our_home_dir)os.umask(umask)# Second forktry:if os.fork() > 0:os._exit(0)except OSError as e:sys.stderr.write("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror))os._exit(1)si = open('/dev/null', 'r')so = open(out_log, 'a+', 0)se = open(err_log, 'a+', 0)os.dup2(si.fileno(), sys.stdin.fileno())os.dup2(so.fileno(), sys.stdout.fileno())os.dup2(se.fileno(), sys.stderr.fileno())# Set custom file descriptors so that they get proper buffering.sys.stdout, sys.stderr = so, se else:def become_daemon(our_home_dir='.', out_log=None, err_log=None, umask=0o022):"""If we're not running under a POSIX system, just simulate the daemonmode by doing redirections and directory changing."""os.chdir(our_home_dir)os.umask(umask)sys.stdin.close()sys.stdout.close()sys.stderr.close()if err_log:sys.stderr = open(err_log, 'a', 0)else:sys.stderr = NullDevice()if out_log:sys.stdout = open(out_log, 'a', 0)else:sys.stdout = NullDevice()class NullDevice:"A writeable object that writes to nowhere -- like /dev/null."def write(self, s):passdef outputLog(sLog):print sLogdef toLog(sLog):sInfo = time.strftime("%y%m%d %H:%M:%S")sInfo += sLogoutputLog(sInfo)def Log_Info(sLog):toLog('Info\t' + sLog)def Log_Error(sLog):toLog('error\t' + sLog)def Log_Debug(sLog):toLog('debug\t' + sLog)class TimerRunner:''''''nTimeScds = 2 #時間間隔sCmd = 'calc'oTm = None@classmethoddef becomeDaemonize(cls):become_daemon()@classmethoddef RunCmd(cls):oSubPcs = subprocess.Popen(cls.sCmd, stdout=subprocess.PIPE, stderr = subprocess.PIPE)while True:nReturnCode = oSubPcs.poll()if 0 == nReturnCode:Log_Info(oSubPcs.stdout.read())breakelif 0 > nReturnCode:Log_Error(oSubPcs.stderr.read())break@classmethoddef timerFun(cls):Log_Info("go to timer fun")cls.initTimer()cls.oTm.start() #再次啟動計時,放在runcmd函數前,保證時間的準確性cls.RunCmd()Log_Info("exit timer fun")@classmethoddef initTimer(cls):cls.oTm = Timer(cls.nTimeScds, cls.timerFun)@classmethoddef run(cls):cls.initTimer()cls.timerFun()cls.becomeDaemonize()def main():TimerRunner.run()

轉載于:https://www.cnblogs.com/yfceshi/p/6897438.html

總結

以上是生活随笔為你收集整理的Python循环定时服务功能(相似contrab)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。