Python定时器引擎

时间:2015-09-07 07:55:22

标签: python

我需要编写一个运行python脚本的python守护程序,并通过TCP将它们的输出发送到服务器。每个脚本应该每N秒运行一次(例如,第一个 - 每10秒,第二个 - 每3秒,第三个 - 每200秒,等等)。 在运行时,守护进程会查找配置文件,其中包含脚本的路径及其时间延迟(我可以像上面那样在秒之上调用吗?)。然后这个守护进程会在适当的时候调用脚本。

我问的问题是如何制作这个简单的计时器引擎?有没有现成的解决方案?

P.S。我有一个想法。这个想法是这样的:

  1. 初始化开始时间(启动守护程序的时间) - start_time
  2. 制作一系列脚本的时间延迟 - time_delays []
  3. 每一秒都做那件事:

    now_time = int(datetime.datetime.now().timestamp())
    
    for x in time_delays:
    
        diff = start_time - now_time             
    
        if diff % x == 0:
    
            # Good! Let's run script file
    

2 个答案:

答案 0 :(得分:0)

只需使用调度程序,请参阅此处的api https://apscheduler.readthedocs.org/en/latest/#以下是一个简单示例:

from apscheduler.schedulers.blocking import BlockingScheduler
import logging
logging.basicConfig()

def t1():
    #run file1 with a PUB\SUB routine

def t2():
    #run file2 with a PUB\SUB routine

def t3():
    #run file3 with a PUB\SUB routine

if __name__ == '__main__':
    scheduler = BlockingScheduler()
    sched.add_interval_job(t1, minutes=1, start_date='2013-08-06 00:09:12')
    scheduler.add_job(t2, 'cron', day_of_week='mon-fri', hour=1, minute=2)
    scheduler.add_job(t3, 'cron', day_of_week='mon-fri', hour=1, second=10)
    print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C'))
    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        pass

答案 1 :(得分:0)

你的简单问题掩盖了最终会变得更复杂的东西 您将需要一个配置函数,一个计时器函数,线程和pubsub(或其他一些机制)来通信脚本已经完成,最后需要套接字或ftp来与服务器通信,其中一个列表也必须保存,或者在配置文件中针对每个脚本单独记录 我假设,多个服务器,可以同时运行的多个脚本以及可能需要很长或很短时间才能完成的脚本。
如何获得脚本工作的结果也会影响您选择用于与每个服务器通信的方法,您可能必须根据脚本结果的性质使用不同的方法。