إلغاء تنفيذ الاستعلام في pyscopg2
-
19-09-2019 - |
سؤال
كيف يمكن للمرء أن يذهب إلى إلغاء تنفيذ عبارة استعلام باستخدام pyscopg2 (برنامج تشغيل python postgres)؟
كمثال، دعنا نقول أن لدي التعليمات البرمجية التالية:
import psycopg2
cnx_string = "something_appropriate"
conn = psycopg2.connect(cnx_string)
cur = conn.cursor()
cur.execute("long_running_query")
ثم أريد إلغاء تنفيذ هذا الاستعلام المدى الطويل من مؤشر ترابط آخر - ما الطريقة التي يجب علي الاتصال بها على كائنات الاتصال / المؤشر للقيام بذلك؟
المحلول
يمكنك إلغاء استعلام عن طريق الاتصال pg_cancel_backend(pid)
وظيفة postgresql في اتصال منفصل.
يمكنك معرفة PID الخلفية للإلغاء من connection.get_backend_pid()
طريقة PSYCOPG2 (متوفرة من الإصدار 2.0.8).
نصائح أخرى
كائن الاتصال لديه عضو إلغاء. باستخدام هذا والخيوط التي يمكنك استخدامها
sqltimeout = threading.Timer(sql_timeout_seconds, conn.cancel)
sqltimeout.start()
عند انتهاء الصلاحية مؤقتا، يتم إرسال الإلغاء إلى الاتصال وسيتم رفع استثناء بواسطة الخادم. لا تنس إلغاء الموقت عند انتهاء الاستعلام عادة ....
sqltimeout.cancel()
لا تنتمي إلى StackOverflow