importuj wewnątrz wątku Pythona

Mam kilka funkcji, które interaktywnie ładują moduły Pythona__import__

Niedawno natknąłem się na jakiś artykuł na temat „blokady importu” w Pythonie, czyli blokady specjalnie dla importu (nie tylko GIL). Ale artykuł był stary, więc może to już nie prawda.

Zastanawiam się nad praktyką importowania w wątku.

import/__import__ wątek bezpieczny?Czy mogą stworzyć martwe zamki?Czy mogą powodować problemy z wydajnością w aplikacji z wątkami?

EDYTUJ 12 września 2012 r

Dzięki za wspaniałą odpowiedź Soravux. Więc import jest bezpieczny dla wątków i nie martwię się o zakleszczenia, ponieważ funkcje, które używają__import__ w moim kodzie nie nazywajcie się nawzajem.

Czy wiesz, czy blokada została nabyta, nawet jeśli moduł został już zaimportowany? Jeśli tak jest, prawdopodobnie powinienem zajrzeć do sys.modules, aby sprawdzić, czy moduł został już zaimportowany przed nawiązaniem połączenia z__import__.

Oczywiście nie powinno to powodować dużej różnicy w CPython, ponieważ i tak jest GIL. Jednak może to znacznie zmienić inne implementacje, takie jak Jython lub pytless bez stosu.

EDIT 19 września 2012 r

O Jythonie, oto co mówią w dokumencie:

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

Python definiuje jednak blokadę importu modułów, która jest implementowana przez Jythona. Blokada ta jest uzyskiwana za każdym razem, gdy dokonywany jest import dowolnej nazwy. Dzieje się tak bez względu na to, czy import przechodzi przez instrukcję importu, ekwiwalent__import__ wbudowany lub pokrewny kod. Należy pamiętać, że nawet jeśli odpowiedni moduł został już zaimportowany, blokada importu modułu będzie nadal pobierana, choćby tylko na krótko.

Wygląda więc na to, że warto sprawdzić sys.modules przed dokonaniem importu, aby uniknąć przejęcia blokady. Co myślisz?

questionAnswers(1)

yourAnswerToTheQuestion