在我包装在python函数中的一个C ++源文件中,有人包含以下内容:
namespace some_namespace
{
static double some_double;
}
float function_that_uses_some_double(float input) {
// implementation
return result;
}
静态全局
some_double
仅在函数内部使用过,因此,如果我将其包装在CPython函数中并以单线程代码调用,则变量一次只能由一个函数使用。丑陋,但没有问题。我的问题是,如果我使用:threading
模块,或multiprocessing
模块。当我有多个使用此模块的进程和/或线程时,它们会互相干扰吗?
最佳答案
如果您使用线程模块,则所有函数将仅共享该全局变量。 python中的线程在字节码边界之间切换,因此锁定不是问题。
如果使用多处理模块,则情况会有所不同,这取决于您对多处理的使用情况。 Python从一个进程开始,因此,只有一个全局变量副本。当您开始使用多重处理时(即从主进程派生新的python进程),该变量的值将被复制到子进程(任务)中,但是这些进程将各自拥有自己的全局变量副本。
如果您遇到麻烦并设置了共享内存段(带有MAP_SHARED的mmap),并且该变量是一个指针,则指向的位置将被共享,并且您将需要使用锁定。
关于c++ - Python中的静态全局变量不安全吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10464626/