Сборка Python 2.7.1 в Mac OS X, импорт потоков и исключение KeyError

1249
Dan

Оригинальная проблема:

Я собираю Python 2.7.1 на Mac OS X 10.6.7 и у меня возникают проблемы с KeyErrorисключением из threadingмодуля при выходе из Python (вероятно, при atexitвызове).

Я нигде не смог найти правильного ответа, и мне интересно, знает ли кто-то здесь, в чем может быть проблема и как, возможно, правильно скомпилировать / настроить Python, чтобы избежать этого.

Шаги для получения ошибки относительно короткие:

echo "import threading" | ./python 

Это дает следующий вывод:

Exception KeyError: KeyError(140735086161056,) in <module 'threading' from '/Users/danerik/quantumnotes/qw-control/quantumsource/external-libs/build/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.pyc'> ignored 

Ошибка, по всей вероятности, безвредна (я не испытал никаких побочных эффектов), но сообщение нежелательно, и я бы предпочел, чтобы его не было.

1

2 ответа на вопрос

0
blahdiblah

В сборке python2.7 из MacPorts такой проблемы нет. Вы можете просто получить их от них или попробовать сравнить ваши флаги конфигурации с их флагами и посмотреть, что отличается.

Сборка от Homebrew также не страдает от этого ... Я смотрел на их флаги сборки и, похоже, не могу найти различий в их скрипте configure. Возможно, я что-то упускаю из виду ... Dan 13 лет назад 0
Я понял свою проблему - это была проблема несоответствия версий в файле `Modules / main.c`. Я смешивал код 2.6.1 с кодом 2.7.1. Dan 13 лет назад 0
@ Дэн Рад это слышать. Я вижу, что вы редактировали свой вопрос, чтобы включить исправление тоже. Здесь было бы более естественно добавить решение в качестве ответа, а затем пометить его как «принятое», а не сделать его частью вопроса. blahdiblah 13 лет назад 0
Хорошо, я сделаю это. Спасибо за совет! Придется немного подождать - так как у меня репутация ниже 100, я могу сначала ответить себе через 6 часов :) Dan 13 лет назад 0
0
Dan

Проблема, с которой я столкнулся, заключалась в том, что у меня был собственный файл Modules / main.c из более старой версии Python (2.6.1), загрязняющий мою версию 2.7.1. Хотя оно почти идентично, главное отличие состоит в том, что в файле 2.6.1 main.c была WaitForThreadShutdown(void)подпрограмма, которая выполняла бы операции, если бы был импортирован модуль потоков. Новый обычайModules/main.c был создан файл на основе нового выпуска 2.7.1, и это решило мою проблему.

Виноват.

Похожие вопросы