reload(module)
, но только если он полностью автономный. Если что-либо еще имеет ссылку на модуль (или любой объект, принадлежащий модулю), тогда вы получите тонкие и любопытные ошибки, вызванные тем, что старый код висит дольше, чем вы ожидали, и такие вещи, как isinstance
, не работают с разными версии одного и того же кода.
Если у вас есть односторонние зависимости, вы также должны перезагрузить все модули, зависящие от перезагруженного модуля, чтобы избавиться от всех ссылок на старый код. И затем перезагружайте модули, которые зависят от перезагруженных модулей, рекурсивно.
Если у вас есть циклические зависимости, которые очень распространены, например, когда вы имеете дело с перезагрузкой пакета, вы должны выгрузить все модули в группе за один присест. Вы не можете сделать это с помощью reload()
, поскольку он будет повторно импортировать каждый модуль до того, как его зависимости будут обновлены, что позволит использовать старые ссылки для ползучести в новые модули.
Единственный способ сделать это в этом случае это взломать sys.modules
, что является неподдерживаемым. Вам нужно будет пройти и удалить каждую запись sys.modules
, которую вы хотели бы перезагрузить при следующем импорте, а также удалить записи, значения которых None
для решения проблемы с реализацией, связанной с кэшированием, при неудачном относительном импорте. Это не очень приятно, но пока у вас есть полностью автономный набор зависимостей, который не оставляет ссылки за пределами его кодовой базы, он работоспособен.
Вероятно, лучше всего перезапустить сервер. : -)
Почему бы просто не использовать Yahoo! Служба GeoPlanet для определения места в WOEID? Или использовать службу YQL для доступа к GeoPlanet через ее таблицу?
http://where.yahooapis.com/v1/places.q('Barrie CA')?appid=[yourappidhere]
или
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20geo.places%20where%20text%3D%22Barrie%20CA%22&format=xml
Нет необходимости в парсинге.
Ура
G
(Раскрытие информации; я работаю в Yahoo! и являюсь частью группы, стоящей за WOEID и GeoPlanet)