每x分钟运行一次python作业

时间:2015-07-13 21:42:03

标签: python mysql sql-server

我有一个小的python脚本,基本上连接到SQL Server(Micrsoft)数据库并从那里获取用户,然后将它们同步到另一个mysql数据库,基本上我只是运行查询来检查用户是否存在,如果没有,然后将该用户添加到mysql数据库。

脚本通常需要大约1分钟才能同步。我要求脚本每5分钟(例如)完成一次(每5分钟一次同步)。

如何才能成为最好的方法呢?

我为用户提供了一些测试数据,但在真实网站上,有更多的用户,所以我不能保证脚本需要1分钟才能执行,甚至可能需要20分钟。但是,每次脚本执行时间隔为15分钟都是理想的问题......

更新 我有sql server windows db的连接参数,所以我使用一个小的ubuntu服务器在位于不同服务器上的两个数据库之间进行同步。所以假设db1(windows)和db2(linux)是数据库服务器,我使用s1(python服务器)和pymssql和mysql python模块进行同步。

此致

2 个答案:

答案 0 :(得分:2)

我不确定cron是否适合这项工作。在我看来,如果你每15分钟运行一次,但有时同步需要20分钟,你可能会同时运行多个进程并可能发生冲突。

如果驱动力是变量执行时间之间的恒定等待时间,那么您可能需要一个持续运行的进程并等待。

def main():
    loopInt = 0
    while(loopInt < 10000):
        synchDatabase() 

        loopInt += 1
        print("call #" + str(loopInt))
        time.sleep(300)  #sleep 5 minutes

main()

(显然不是连续的,但是长时间运行)你可以将while的结果设置为true,它将是连续的。 (注释掉loopInt += 1

编辑添加:请参阅有关监控流程的评论中的注释,因为您不希望脚本挂起或崩溃,而您却不知道它。

答案 1 :(得分:1)

您可能希望使用处理队列的系统,例如RabbitMQ,并使用Celery作为python接口来实现它。使用Celery,您可以将任务(如执行脚本)添加到队列中,或者运行在给定时间间隔后执行任务的计划(就像cron一样)。

开始使用http://celery.readthedocs.org/en/latest/