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

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

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

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

Являются /import__import__ поток безопасно?Могут ли они создать мертвые замки?Могут ли они вызвать проблемы с производительностью в многопоточном приложении?

РЕДАКТИРОВАТЬ 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 определяет блокировку импорта модуля, которая реализована в Jython. Эта блокировка получается всякий раз, когда производится импорт любого имени. Это верно, если импорт проходит через оператор импорта, эквивалентный__import__ встроенный или связанный код. Это'Важно отметить, что даже если соответствующий модуль уже был импортирован, блокировка импорта модуля все равно будет получена, хотя бы ненадолго.

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

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

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