Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 1, 2009 19:40:37

goblin_maks
От:
Зарегистрирован: 2008-12-10
Сообщения: 110
Репутация: +  0  -
Профиль   Отправить e-mail  

__import__ & reload()

как быть.. использую следующую конструкцию для выполнения тех или инных модулей:

        for i in toolName:


if (sys.modules.has_key(i)):
module = reload(sys.modules[i])
else:
module = __import__(i, globals())
это часть того что должно выполнится в потоке. Если прервать поток и импорт или релоад модуля до конца не выполнится, то при следующем старте потока ни импорт ни релоад не выполняются..как с этим быть и как бороться..



Офлайн

#2 Апрель 1, 2009 20:51:57

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

__import__ & reload()

не прибивать поток по terminate. Если нужно - выставлять флаг и проверять его из потока.
import выставляет import lock, и если в этот момент поток аварийно завершить - lock никогда не будет снят.



Офлайн

#3 Апрель 1, 2009 21:53:32

goblin_maks
От:
Зарегистрирован: 2008-12-10
Сообщения: 110
Репутация: +  0  -
Профиль   Отправить e-mail  

__import__ & reload()

спасибо..с утра буду пробовать



Офлайн

#4 Апрель 2, 2009 16:26:01

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

__import__ & reload()

или залочить код для импорт\релоад и прибивания потока одним локом, меньше возни с проверками



Офлайн

#5 Апрель 2, 2009 17:42:28

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

__import__ & reload()

прибивание - штука опасная и вредная вообще, а не только для импорта.
Я видел много проблем, связанных с аварийным завершением потока.
И считаю, что если запущенный поток потом где-то не join - это серьезная ошибка в архитектуре, которая рано или поздно себя проявит.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version