Как обрабатываются операции импорта в plpython? - программирование
Подтвердить что ты не робот

Как обрабатываются операции импорта в plpython?

У меня есть функция plypython, которая делает некоторую магию json. Для этого он явно импортирует библиотеку json.

Является ли импорт вызываемым при каждом вызове функции? Есть ли какие-либо последствия для производительности, о которых я должен знать?

4b9b3361

Ответ 1

import выполняется при каждом вызове функции. Это то же поведение, которое вы получили бы, если бы вы написали обычный модуль Python с выражением import внутри тела функции, как это было на уровне модуля.

Да, это повлияет на производительность.

Вы можете обойти это, кэшируя свой импорт следующим образом:

CREATE FUNCTION test() RETURNS text
LANGUAGE plpythonu
AS $$
if 'json' in SD:
    json = SD['json']
else:
    import json
    SD['json'] = json

 return json.dumps(...)
$$;

Это, по общему признанию, не очень красиво, и обсуждаются лучшие способы сделать это, но они не произойдут до PostgreSQL 9.4.