2017-04-17 4 views
0

In Python 2.7 README Datei in gemeinsam genutzten Bibliothek zusammengestellt, heißt esWie Python-Code (c) Quelle

mit Python Ab 2.3 kann die Mehrheit der Dolmetscher in eine gemeinsame Bibliothek gebaut werden, wo dann vom Interpreter verwendet werden ausführbare

ich möchte die folgenden globalen Variablen in pystate.c wissen, werden in der gemeinsam genutzten Bibliothek oder der ausführbaren Datei kompiliert?

static PyInterpreterState *interp_head = NULL; 

PyThreadState *_PyThreadState_Current = NULL; 

By the way, wenn eine solche globale (statische) Variablen in gemeinsam genutzten Bibliothek kompiliert werden, nicht würden diese Zustände zwischen verschiedenen Python Prozessen gemeinsam genutzt werden? B. pCryptGenRandom in random.c

Antwort

1

beiden Symbole sind in dem Null-initialisierte Segment der gemeinsam genutzten Bibliothek:

% nm /usr/lib/x86_64-linux-gnu/libpython2.7_d.so|egrep '(interp_head|_PyThreadState_Current)' 
000000000062a230 b interp_head 
000000000062a208 B _PyThreadState_Current 

Die interp_head ist eine statische Variable - eine Variable ohne externe Bindung - und ist außen nicht sichtbar das Modul. _PyThreadState_Current hat externe Bindung und ist sichtbar, um das Programm der gemeinsame Bibliothek mit:

% objdump -TC /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 | \ 
    egrep 'interp_head|_PyThreadState_Current' 
000000000056d3c0 g DO .bss 0000000000000008 Base  _PyThreadState_Current 

(Nur _PyThreadState_Current in der externen Symboltabelle aufgelistet).


Jeder Prozess wird einen separaten Satz globaler Variablen haben; Diese werden nicht zwischen Python-Prozessen ausgetauscht.

Verwandte Themen