Forum: PC-Programmierung Python pymysql, abbrechen wenn zeit zu lange


von Mirco (Gast)


Lesenswert?

Hi,

wie kann ich in Python eine MySQL Query stoppen wenn die Abfrage über 
z.B.: 10 sekunden dauert?

1
import pymysql
2
3
db = pymysql.connect(host='xxx', port=3306, user='xxx', passwd='xxx', db='xxx')
4
5
cursor = db.cursor()
6
7
try:
8
    cursor.execute("SELECT a.id FROM accounts a limit 1;") 
9
    ## timeoutregel 10 sekunden
10
except:
11
    print("abgebrochen, hat zu lange gedauert")
12
13
print(cursor.fetchall())          
14
15
db.close()

von T.roll (Gast)


Lesenswert?

Erstmal die Datenbank optimieren? Bei über 10 Sekunden für so eine 
Abfrage ist da wohl einiges im argen.

von Mirco (Gast)


Lesenswert?

Hi,

das war nur ein Beispiel. Die gepostete Query dauert unterhalb einer 
Sekunde

von Jim M. (turboj)


Lesenswert?

> wie kann ich in Python eine MySQL Query stoppen wenn die Abfrage über [...]

Gar nicht, jedenfalls ist das in der DB API so nicht vorgesehen AFAIK.

Wenn man das unbedingt braucht, müsste man es z.B. mit verschiedenen 
Threads lösen. Was bei den oft nicht thread-sicheren DB Zugriffen gar 
nicht so einfach ist.

von olibert (Gast)


Lesenswert?

Das koennte gehen, falls das Optimieren der Datenbank oder des Query 
nicht in Frage kommt:

https://stackoverflow.com/questions/2281850/timeout-function-if-it-takes-too-long-to-finish/22348885#22348885

von Dinosaurier (Gast)


Lesenswert?

Versuch mal den timeout in der query als hint mit anzugeben

SELECT /*+ MAX_EXECUTION_TIME(1000) */ a.d FROM accounts a LIMIT 1

https://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html

von Jens G. (jensig)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.