Creazione di Python 2.7.1 su Mac OS X, importazione di thread e un'eccezione KeyError


1

Problema originale:

Sto creando Python 2.7.1 su Mac OS X 10.6.7 e sto riscontrando problemi con KeyErrorun'eccezione generata dal threadingmodulo quando Python viene chiuso (probabilmente durante la atexitchiamata).

Non sono stato in grado di trovare una risposta adeguata da nessuna parte, e mi chiedo se qualcuno qui sappia quale potrebbe essere il problema e come forse compilare / configurare Python correttamente per evitarlo.

I passaggi per generare l'errore sono relativamente brevi:

echo "import threading" | ./python

Questo produce il seguente output:

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

L'errore è verosimilmente innocuo (non ho avuto effetti negativi), ma il messaggio è indesiderabile e preferirei che non ci fosse.

Risposte:


0

La build di python2.7 da MacPorts a non ha questo problema. Potresti semplicemente ottenerlo da loro o provare a confrontare i tuoi flag di configurazione con i loro e vedere cosa differisce.


Anche la build di Homebrew non soffre di questo ... Ho guardato i loro flag di build e non riesco a trovare differenze nel loro script di configurazione. Forse sto trascurando qualcosa ...
Dan,

Ho capito il mio problema: si trattava di una mancata corrispondenza della versione nel Modules/main.cfile. Stavo mescolando il codice 2.6.1 con il codice 2.7.1.
Dan,

@ Dan felice di sentirlo. Vedo che hai modificato la tua domanda per includere anche la correzione. Da queste parti sarebbe più naturale aggiungere la soluzione come risposta e quindi contrassegnarla come "accettata" anziché renderla parte della domanda.
blahdiblah,

Va bene - lo farò. Grazie per la punta! Dovrà aspettare un po '- dato che ho meno di 100 anni di reputazione, posso prima rispondere da solo in 6 ore :)
Dan

0

Il problema che ho riscontrato è che avevo un file Modules / main.c personalizzato da una versione precedente di Python (2.6.1) che inquinava la mia versione 2.7.1. Sebbene quasi identico, la differenza principale è che nel file 2.6.c main.c c'era una WaitForThreadShutdown(void)routine che avrebbe eseguito operazioni se il modulo threading fosse stato importato. È Modules/main.cstato quindi creato un nuovo file personalizzato basato sulla nuova versione 2.7.1 e questo ha risolto il mio problema.

Colpa mia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.