Python定时器引擎

2024-04-18 08:48:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

另外,我有一个主意。这个想法是这样的:

  1. 初始化开始时间(启动守护程序的时间)-开始时间
  2. 创建脚本的时间延迟-时间延迟[]
  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
    

Tags: 引擎路径程序服务器脚本datetimetime进程
2条回答

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

只需使用调度程序,请参见此处的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

相关问题 更多 >