diff options
author | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2010-04-07 23:52:53 +0100 |
---|---|---|
committer | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2010-04-07 23:52:53 +0100 |
commit | e8286084e9400ae634f06e9da34e4de474b51eb7 (patch) | |
tree | 541a5b2f461f6d037b7e0a74b5b1be32b56d5e76 | |
parent | aeec583ff1fb9ca4633f72b9305b2f0ae1315606 (diff) | |
download | psycopg2-e8286084e9400ae634f06e9da34e4de474b51eb7.tar.gz |
Free the GIL in blocking operations in V2 COPY FROM.
-rw-r--r-- | psycopg/pqpath.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/psycopg/pqpath.c b/psycopg/pqpath.c index 7162830..ee132ab 100644 --- a/psycopg/pqpath.c +++ b/psycopg/pqpath.c @@ -1065,13 +1065,18 @@ _pq_copy_in(cursorObject *curs) o = PyObject_CallFunction(func, NULL); if (o == NULL) goto clear; if (o == Py_None || PyString_GET_SIZE(o) == 0) break; + Py_BEGIN_ALLOW_THREADS; rv = PQputline(curs->conn->pgconn, PyString_AS_STRING(o)); + Py_END_ALLOW_THREADS; Py_DECREF(o); if (0 != rv) goto clear; } Py_XDECREF(o); + + Py_BEGIN_ALLOW_THREADS; PQputline(curs->conn->pgconn, "\\.\n"); PQendcopy(curs->conn->pgconn); + Py_END_ALLOW_THREADS; /* if for some reason we're using a protocol 3 libpq to connect to a protocol 2 backend we still need to cycle on the result set */ |