sql >> Databáze >  >> RDS >> Mysql

časový limit dotazu python MySQLDB

Okroucené řešení společnosti @nosklo je elegantní a funkční, ale pokud se chcete vyhnout závislosti na twisted, úkol je stále proveditelný, např.:

import multiprocessing

def query_with_timeout(dbc, timeout, query, *a, **k):
  conn1, conn2 = multiprocessing.Pipe(False)
  subproc = multiprocessing.Process(target=do_query,
                                    args=(dbc, query, conn2)+a, 
                                    kwargs=k)
  subproc.start()
  subproc.join(timeout)
  if conn1.poll():
    return conn1.recv()
  subproc.terminate()
  raise TimeoutError("Query %r ran for >%r" % (query, timeout))

def do_query(dbc, query, conn, *a, **k):
  cu = dbc.cursor()
  cu.execute(query, *a, **k)
  return cu.fetchall()


  1. SSL pro připojení Nodejs PostgreSQL

  2. Získejte název volající procedury nebo funkce v Oracle PL/SQL

  3. Konfigurace mysql se zastaví při spuštění serveru

  4. mysql_connect (localhost / 127.0.0.1) pomalý na platformě Windows