如何在Python中设置MSSQL定时查询任务

用户在使用Python语言开发一个MSSQL定时查询任务时遇到了问题。具体来说,他是想在Python中使用threading模块来设置一个定时任务,每隔一段时间(比如100秒)就查询一次MSSQL数据库,看看某个任务的状态是否已经完成。如果任务状态已经完成,则停止查询并退出程序。
在这里插入图片描述

然而,他在尝试实现这个定时任务时遇到了一个问题:无论他将threading.Timer设置成什么时间间隔,他都无法让查询任务按照预期的间隔执行。相反,他总是看到'Watching'语句不断地打印出来,似乎查询任务在不断地执行。

2、解决方案

为了解决这个问题,用户尝试了多种方法,包括使用threading模块和Twisted库来设置定时任务。然而,他都没有成功。最后,他找到了一个更简单的方法来实现他的需求。

* 解决方案1:使用time模块和while循环 *

他可以使用time模块和while循环来设置一个简单的定时任务。代码如下:

import time
import pymssql

def watcher_query(cursor):
    print('Watching')
    return cursor.execute(""" select *
                              from some_table' """)

def is_it_done(row):
    if row['status'] == 'done':
        return row['the_id'], True
    else:
        return row['the_id'], False

def job_watch(server):
    with pymssql.connect(server_info) as conn:
        with conn.cursor(as_dict=True) as cur:
            while True:
                watcher_query(cur)
                for row in cur:
                    if is_it_done(row)[1]:
                        return

                time.sleep(100)  # Sleep for 100 seconds

job_watch(server_info)

在这个代码中,他使用while True循环来不断地查询数据库,每次查询的间隔是100秒。如果查询到任务状态已经完成,则退出程序。

* 解决方案2:使用APScheduler库 *

除了使用time模块和while循环之外,用户还可以使用APScheduler库来设置定时任务。APScheduler是一个功能强大的定时任务库,可以很容易地创建和管理定时任务。

from apscheduler.schedulers.background import BackgroundScheduler

def watcher_query(cursor):
    print('Watching')
    return cursor.execute(""" select *
                              from some_table' """)

def is_it_done(row):
    if row['status'] == 'done':
        return row['the_id'], True
    else:
        return row['the_id'], False

def job_watch(server):
    with pymssql.connect(server_info) as conn:
        with conn.cursor(as_dict=True) as cur:
            scheduler = BackgroundScheduler()
            scheduler.add_job(watcher_query, 'interval', seconds=100, args=[cur])
            scheduler.start()

            while True:
                for row in cur:
                    if is_it_done(row)[1]:
                        scheduler.shutdown()
                        return

job_watch(server_info)

在这个代码中,他使用APScheduler库来创建了一个定时任务。这个定时任务每隔100秒就会执行一次watcher_query函数。如果查询到任务状态已经完成,则停止定时任务并退出程序。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值