[英]Python polling MSSQL at set interval
我需要轮询MSSQL数据库以查看正在运行的作业的状态。 我想每隔X秒运行一次状态检查,以查看状态是否=完成。 我正在尝试使用线程模块。 我已经用一些简单的print语句测试了线程模块,它似乎可以正常工作,但是当我在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 d(cur):
watcher_query(cur)
for row in cur:
return is_it_done(row)[1]
threading.Timer(100, d).start()
def job_watch(server):
with pymssql.connect(server_info) as conn:
with conn.cursor(as_dict=True) as cur:
is_done = false
while is_done:
is_done = d(cur)
无论我如何设置threading.Timer
,我都会看到“ Watching”语句不断打印。 是否有更好的方法来设置轮询计时器?
我还尝试使用Twisted设置一个基本函数,该函数每隔X秒调用一次函数,直到满足某些条件为止。 我还没有尝试使用MSSQL。
您的代码编写方式似乎工作不正常:
由于is_done = false
,因此无法编译
如果固定为is_done = False
,它将立即跳过循环,
即使以某种合理的方式修复了循环,您也永远不会调用threading.Timer(100, d).start()
并且在使用return is_it_done(row)[1]
检查了第一行之后从d
返回时不会检查任何其他行return is_it_done(row)[1]
实际的定时工作程序方法执行什么操作,打印到控制台或检查数据库都无关紧要,并且在相同的计时器下应该工作相同。
像这样的事情呢:
import threading
def is_it_done():
# get some dummy predictable results
if not hasattr(is_it_done, 'results'):
is_it_done.results = iter([False] * 3)
return next(is_it_done.results, True)
def job_watch():
is_done = False
def d():
is_done = is_it_done()
print('is_done: {}'.format(is_done))
timer = threading.Timer(3, d).start()
d()
job_watch()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.