Python에서 데이터베이스 연결 시간 초과 설정
데이터베이스에 액세스해야 하는 RESTful API를 만들고 있습니다.레스티쉬, 오라클, SQL 화학을 사용하고 있습니다.하지만 Restish나 다른 웹 API를 고려하지 않고 가능한 한 일반적으로 질문을 구성하도록 노력하겠습니다.
쿼리를 실행하는 연결에 대한 시간 초과를 설정할 수 있습니다.이는 장시간 실행 중인 쿼리가 포기되고 연결이 삭제(또는 재사용)되도록 하기 위한 것입니다.이 쿼리 시간 초과는 글로벌 값이 될 수 있습니다. 즉, 쿼리 또는 연결 만들기별로 변경할 필요가 없습니다.
다음 코드가 주어집니다.
import cx_Oracle
import sqlalchemy.pool as pool
conn_pool = pool.manage(cx_Oracle)
conn = conn_pool.connect("username/p4ss@dbname")
conn.ping()
try:
cursor = conn.cursor()
cursor.execute("SELECT * FROM really_slow_query")
print cursor.fetchone()
finally:
cursor.close()
위의 코드를 수정하여 쿼리 시간 초과를 설정하려면 어떻게 해야 합니까?이 제한 시간은 연결 작성에도 적용됩니까?
이는 java.sql과 유사합니다.문의 setQueryTimeout(intseconds) 메서드는 Java에서 수행됩니다.
감사해요.
쿼리를 위해, 당신은 타이머와 conn.timeout 호출을 볼 수 있습니다.
다음 줄에 있는 무언가:
t = threading.Timer(timeout,conn.cancel)
t.start()
cursor = conn.cursor()
cursor.execute(query)
res = cursor.fetchall()
t.cancel()
Linux의 경우 /etc/oracle/sqlnet.ora,
sqlnet.outbound_connect_timeout= value
옵션도 있습니다.
tcp.connect_time 및 sqlnet.time, 행운을 빕니다!
Oracle에서 특정 개수의 logical_reads_per_call 및/또는 cpu_per_call 후 쿼리를 종료하도록 PROFILE을 설정할 수 있습니다.
Windows 11의 경우 아래 줄sqlnet.ora
연결 중에 해당 시간 초과가 발생했습니다.
tcp.connect_timeout=3
베타루가 지적한 바와 같이
시스템 경보를 사용한 시간 초과
운영 체제 제한 시간을 사용하여 이 작업을 수행하는 방법은 다음과 같습니다.일반적이며 Oracle 이외의 용도로도 사용할 수 있습니다.
import signal
class TimeoutExc(Exception):
"""this exception is raised when there's a timeout"""
def __init__(self): Exception.__init__(self)
def alarmhandler(signame,frame):
"sigalarm handler. raises a Timeout exception"""
raise TimeoutExc()
nsecs=5
signal.signal(signal.SIGALRM, alarmhandler) # set the signal handler function
signal.alarm(nsecs) # in 5s, the process receives a SIGALRM
try:
cx_Oracle.connect(blah blah) # do your thing, connect, query, etc
signal.alarm(0) # if successful, turn of alarm
except TimeoutExc:
print "timed out!" # timed out!!
언급URL : https://stackoverflow.com/questions/2374079/set-database-connection-timeout-in-python
'programing' 카테고리의 다른 글
Cortex-A9에서 TLB 효과 측정 (0) | 2023.07.23 |
---|---|
URL 시작 부분의 문자열 제거 (0) | 2023.07.23 |
파이썬에서 이름 망글링을 사용해야 합니까? (0) | 2023.07.23 |
키 Json, Sum 및 동적 그룹화 방법 (0) | 2023.07.23 |
계산 공식이 아닌 Excel 셀 값 읽기 -openpyxl (0) | 2023.07.23 |