Когда я запускаю ее через свой скрипт, она прерывается примерно на 2/3 пути. В настоящее время я нашел обходной путь, заставив программу спать на 10 секунд, прежде чем перейти к следующему оператору SQL, однако это неэффективно и ненадежно, поскольку некоторые процедуры могут не завершиться за это время. Я ищу более элегантный способ реализовать это.
Текущий код:
Код: Выделить всё
cursor.execute("execute mySP")
time.sleep(10)
cursor.commit()
заставить Python ждать завершения выполнения хранимой процедуры
Я попробовал решение с использованием Tornado и генераторов ввода-вывода, но столкнулся с той же проблемой, которая указана в статье, и которая так и не была решена. Я также попробовал принятое решение для установки поля текущего состояния в базе данных с помощью моих хранимых процедур. В начале моего статуса SP обновляется до 1 в RunningStatus, а когда статус SP завершается, обновляется до 0 в RunningStatus. Затем я реализовал следующий код Python:
Код: Выделить всё
conn=pyodbc_connect(conn_str)
cursor=conn.cursor()
sconn=pyodbc_connect(conn_str)
scursor=sconn.cursor()
cursor.execute("execute mySP")
cursor.commit()
while 1:
q=scursor.execute("SELECT Status FROM RunningStatus").fetchone()
if(q[0]==0):
break
Код: Выделить всё
conn=pyodbc_connect(conn_str)
cursor=conn.cursor()
sconn=pyodbc_connect(conn_str)
scursor=sconn.cursor()
cursor.execute("execute mySP")
while 1:
q=scursor.execute("SELECT Status FROM RunningStatus").fetchone()
if(q[0]==0):
break
Подробнее здесь: https://stackoverflow.com/questions/472 ... rom-python
Мобильная версия