문제

pyscopg2 (Python Postgres 드라이버)를 사용하여 쿼리 명령문의 실행을 어떻게 취소 하는가?

예를 들어, 다음 코드가 있다고 가정 해 봅시다.

import psycopg2
cnx_string = "something_appropriate"

conn = psycopg2.connect(cnx_string)
cur = conn.cursor()
cur.execute("long_running_query")

그런 다음 다른 스레드에서 장기 실행 쿼리의 실행을 취소하고 싶습니다.이 작업을 수행하려면 Connection/Cursor 객체를 호출해야합니까?

도움이 되었습니까?

해결책

전화하여 쿼리를 취소 할 수 있습니다 pg_cancel_backend(pid) 별도의 연결에서 PostgreSQL 기능.

백엔드의 PID를 알 수 있습니다. connection.get_backend_pid() psycopg2의 방법 (버전 2.0.8에서 사용할 수 있음).

다른 팁

PSYCOPG2의 비동기 실행 지원이 있습니다 제거됨.

py-postgresql과 그것을 사용할 수있는 경우 업무 (PY3K), 내부 구현은 비동기식이며 방해받는 지원을 지원합니다.

연결 객체에는 CANCEL 멤버가 있습니다. 이것과 스레딩을 사용하여 사용할 수 있습니다

sqltimeout = threading.Timer(sql_timeout_seconds, conn.cancel)
sqltimeout.start()

타이머가 만료되면 취소가 연결로 전송되고 서버에서 예외가 제기됩니다. 쿼리가 정상적으로 완료되면 타이머를 취소하는 것을 잊지 마십시오 ....

sqltimeout.cancel()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top