импорт внутри потока Python

У меня есть некоторые функции, которые в интерактивном режиме загружают модули Python, используя__import__

Недавно я наткнулся на статью о блокировке импорта. в Python, то есть блокировка специально для импорта (не только GIL). Но статья была старой, так что, может быть, это больше не так.

Это заставляет меня задуматься о практике импорта в потоке.

Are import/__import__ thread safe? Can they create dead locks? Can they cause performance issues in a threaded application?

РЕДАКТИРОВАТЬ 12 сентября 2012

Спасибо за отличный ответ Soravux. Таким образом, импорт является поточно-ориентированным, и я не беспокоюсь о взаимоблокировках, так как функции, которые используют__import__ в моем коде не звоните друг другу.

Знаете ли вы, получена ли блокировка, даже если модуль уже был импортирован? Если это так, я, вероятно, должен заглянуть в sys.modules, чтобы проверить, был ли модуль уже импортирован, прежде чем делать вызов__import__.

Конечно, это не должно иметь большого значения в CPython, так как в любом случае есть GIL. Однако это может иметь большое значение для других реализаций, таких как Jython или Python без стеков.

РЕДАКТИРОВАТЬ 19 сентября 2012

О Jython, вот что они говорят в документе:

http://www.jython.org/jythonbook/en/1.0/Concurrency.html#module-import-lock

Python does, however, define a module import lock, which is implemented by Jython. This lock is acquired whenever an import of any name is made. This is true whether the import goes through the import statement, the equivalent __import__ builtin, or related code. It’s important to note that even if the corresponding module has already been imported, the module import lock will still be acquired, if only briefly.

Таким образом, кажется, что имеет смысл проверить sys.modules перед выполнением импорта, чтобы избежать блокировки. Как вы думаете?

Ответы на вопрос(1)

Ваш ответ на вопрос