2015-09-07 33 views
-1

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

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

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 
    
+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 
0

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