Python定时器引擎



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

我要问的问题是,我如何才能使这个简单的定时器引擎?有现成的解决方案吗?

注:我有一个主意。这个想法是这样的:

  1. 初始化启动时间(启动守护进程的时间)- start_time
  2. 创建一个脚本的时间延迟数组- time_delayed []
  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
    

使用调度程序,查看这里的api https://apscheduler.readthedocs.org/en/latest/#这里是一个快速示例:

from apscheduler.schedulers.blocking import BlockingScheduler
import logging
logging.basicConfig()
def t1():
    #run file1 with a PUBSUB routine
def t2():
    #run file2 with a PUBSUB routine
def t3():
    #run file3 with a PUBSUB 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

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

最新更新