在Python 2.7 README
文件中,它说
从Python 2.3开始,可以构建大部分解释器 到共享库,然后解释器可以使用它 可执行
我想知道pystate.c
中的以下全局变量是否已编译到共享库或可执行文件中?
static PyInterpreterState *interp_head = NULL;
PyThreadState *_PyThreadState_Current = NULL;
顺便说一句,如果将这样的全局(静态)变量编译到共享库中,这些状态是否会在不同的python进程之间共享?例如,pCryptGenRandom
random.c
答案 0 :(得分:1)
两个符号都出现在共享库的零初始化段中:
% nm /usr/lib/x86_64-linux-gnu/libpython2.7_d.so|egrep '(interp_head|_PyThreadState_Current)'
000000000062a230 b interp_head
000000000062a208 B _PyThreadState_Current
interp_head
是一个静态变量 - 没有外部链接的变量 - 在模块外部不可见。 _PyThreadState_Current
具有外部链接,并且使用共享库对程序可见:
% 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
(外部符号表中仅列出_PyThreadState_Current
)。
每个进程都有一组单独的全局变量;这些不在Python进程之间共享。