Pythonはある機能を実現してしばらくの時間ごとに一回の機能の方法を実行されます。

1990 ワード

私はプロジェクトをする時に問題があります。
ある関数は毎時の3分間に一回実行される必要があります。15時45分にプログラムを起動したいです。18分過ぎたら16時03分にこの関数が実行されます。次は60分過ぎたら17時03分にもう一度実行されます。次は18時03分で、これを類推します。
以下はTimerによる再パッケージでこの機能を実現しました。

# -*- coding: utf-8 -*-
# ==================================================
#   Timer           :              
#        ,           Timer        
# ==================================================
__author__ = 'liujiaxing'

from threading import Timer
from datetime import datetime

class MyTimer( object ):

 def __init__( self, start_time, interval, callback_proc, args=None, kwargs=None ):

  self.__timer = None
  self.__start_time = start_time
  self.__interval = interval
  self.__callback_pro = callback_proc
  self.__args = args if args is not None else []
  self.__kwargs = kwargs if kwargs is not None else {}

 def exec_callback( self, args=None, kwargs=None ):
  self.__callback_pro( *self.__args, **self.__kwargs )
  self.__timer = Timer( self.__interval, self.exec_callback )
  self.__timer.start()

 def start( self ):
  interval = self.__interval - ( datetime.now().timestamp() - self.__start_time.timestamp() )
  print( interval )
  self.__timer = Timer( interval, self.exec_callback )
  self.__timer.start()

 def cancel( self ):
  self.__timer.cancel() 
  self.__timer = None

class AA:
 def hello( self, name, age ):
  print( "[%s]\thello %s: %d
" % ( datetime.now().strftime("%Y%m%d %H:%M:%S"), name, age ) ) if __name__ == "__main__": aa = AA() start = datetime.now().replace( minute=3, second=0, microsecond=0 ) tmr = MyTimer( start, 60*60, aa.hello, [ "owenliu", 18 ] ) tmr.start() tmr.cancel()
以上のPythonは、ある機能を一定の時間ごとに実行される機能方法を実現しました。つまり、小編集は皆さんに提供した内容を全部共有しています。