看这段代码:
import pyodbc
cnxn = pyodbc.connect(connection_string)
cursor = cnxn.cursor()
cursor.execute(query)
cnxn.commit()
通常这段代码可以正常工作。但有些查询需要无限的时间才能执行。这不是一个Python问题。当我使用 SQL Server Management Studio 执行它们时,我有相同的行为。但当我厌倦了等待时,我可以取消查询。我正在寻找 python 中的模拟可能性。我可以告诉 python 以某种方式尝试大约 10 分钟然后取消吗?我该怎么办?
您可以尝试在子进程中运行 SQL 查询,如果未完成,可以在一段时间后取消该查询。例如:
import pyodbc
from multiprocessing import Process
def worker():
cnxn = pyodbc.connect(connection_string)
cursor = cnxn.cursor()
cursor.execute(query)
cnxn.commit()
def main():
p = Process(target=worker)
p.start()
# Wait for up to 10 minutes for the process to complete:
p.join(600) # 600 seconds
# Did the process actually complete?
if p.exitcode is None:
# The process is still running after 600 second, so:
p.terminate() # Kill the process
print('Process killed')
if __name__ == '__main__':
main()