Re: signal handling in plpython
От | Heikki Linnakangas |
---|---|
Тема | Re: signal handling in plpython |
Дата | |
Msg-id | e2c4c551-4afb-1f12-496a-aeb3faa3fbd0@iki.fi обсуждение исходный текст |
Ответ на | signal handling in plpython (Mario De Frutos Dieguez <mariodefrutos@gmail.com>) |
Ответы |
Re: signal handling in plpython
Re: signal handling in plpython |
Список | pgsql-hackers |
On 10/13/2016 08:57 PM, Mario De Frutos Dieguez wrote: > I come here asking for some advice/help because we're facing some > unexpected behavior when we want to interrupt functions doing CPU intensive > operations in plpython. > > Our problem is that we're not able to interrupt them when they're making > CPU intensive operations. For example, when calculating Moran using PySAL, > the SIGINT handler of Postgres is not able to cancel it. Python code isn't interruptible, but any queries you run within a python function are. So if you have a loop in your function that you know will run for a long time, you could issue a dummy "SELECT 1" query every once in a while. However, that doesn't help, if the long loop is in a library function that you have no control over, rather than the PL/python function itself. It would be nice to have a solution for this in plpython itself, so that the query cancel was turned into a Python exception. Patches for that would be welcome. I think you could use Py_AddPendingCall() from PostgreSQL's signal handler, to schedule a call to a function that in turn throws a Python exception. That'll need some changes to PostgreSQL's normal signal handlers, like die() and StatementCancelHandler() in postgres.c, but it seems doable. - Heikki
В списке pgsql-hackers по дате отправления: