Связь на основе данных с kinterbasdb

У меня есть серьезная проблема, реализовало приложение в python, что мне нужно, чтобы он работал в начало windows, но оказывается, что сервер, который работает с медлительным Firebird несколько секунд в трожении и это вызывает у меня проблемы связи с программой python. Я ищу способ манипулировать этой связью:

conn = kinterbasdb.connect(host,user,pass)

Я ищу решение, но если кто-то знает, как делать это ему было бы благодарно за Ваш Ваш комментарий. Привет

0
задан 04.04.2016, 18:05
1 ответ

Немного сложно доставать заключения только этой линии кода, но если связь возвращается False (из-за ошибки комментария), не удавшись в присоединении, тогда мне кажется, что самое простое состоит в том, чтобы он продолжил пробовать до тех пор, пока сервер Firebird не будет готов:

import time

conn = kinterbasdb.connect(host, user, pass)
while conn == False:
    time.sleep(5) # Cada 5 segundos
    conn = kinterbasdb.connect(host, user, pass)
cursor = conn.cursor()
# ...

Вместо того, чтобы ждать количество секунд изначально, процесс будет продолжать пробовать до того, чтобы находить связь. Ты можешь конвертировать количество секунд, которое нужно ждать в параметре configurable в какой-то стороне.

Представляя, что у тебя есть какой-то файл конфигураций типа settings.py:

CONNECTION_SLEEP_SECONDS = 5
MAXIMUM_CONNECTION_ATTEMPTS = 3 # Por la recomendación de @jasilva

Тогда код остался бы таким:

import time
import settings

conn = kinterbasdb.connect(host, user, pass)
attempts = 0
while conn == False or attempts <= settings.MAXIMUM_CONNECTION_ATTEMPTS:
    time.sleep(settings.CONNECTION_SLEEP_SECONDS)
    conn = kinterbasdb.connect(host, user, pass)
    attempts += 1
if conn == False:
    raise Exception('La base de datos no está disponible')
cursor = conn.cursor()
# ...

Замечание:

Я принимаю, что функция connect возврати booleano (False) основанный на комментарии, который ты предоставлял, по поводу ошибки.

2
ответ дан 24.11.2019, 14:38
  • 1
    Стоило бы, помещать признак maximumConnectionAttempt, чтобы не быть бесконечно в loop – jasilva 04.04.2016, 19:09
  • 2
    @jasilva, если, быть и # 237; в м и # 225; s приведенный в соответствие. Я это добавляю – César 04.04.2016, 19:14
  • 3
    @jasilva Я Использую Try: except: чтобы санкционировать conexi и # 243; n, tambi и # 233; n я использую рукописный шрифт, который они разместили в комментарии, и он говорит мне эту ошибку conn = kinterbasdb.connect (host, user, pass) и TypeError: bool object не attributed getitem ... Я понимаю ее l и # 243; gica, что меня выдвигаете Вы, кто он равен моей. Сейчас, когда я не понимаю это из-за того, что в начало windows aplicaci и # 243; n (с любым временем ejecuci и # 243; n) он продолжает бросать мне ошибки, но если я вновь выполняю ее вручную, эта функционирует совершенно.: (– – Nahuel Jakobson 04.04.2016, 22:17