python多进程中的C静态变量

时间:2012-10-10 02:08:39

标签: python static-variables multiprocess

这里我有一个用C ++调用 foo 编写的函数,并通过使用用C编写的python包装器(wrapper.c)从python中调用它( foo_wrapper )。

在wrapper.c中,我有一个静态全局变量“x”,由 foo 使用和更新。

当我在一个进程中从python调用 foo 时,一切正常。

然而,当我在python中使用多进程模块时,即使从主进程调用foo,这个“x”值也不是应该的!调用程序是这样的:

P=Process(target=myf, args=(a,))
P.start()
foo_wrapper()
P.join()

我的问题是:当调用fork()时,即启动了多个进程,python如何处理父/子进程的堆栈或堆?如何将“x”的值设置为主进程(或父进程)?

1 个答案:

答案 0 :(得分:0)

C ++全局变量只对单个进程是全局变量。如果您正在使用multiprocessing模块,那么根据定义,您将拥有多个进程,每个进程都有自己的全局变量视图。 Python没有做任何特殊的事情来影响这种行为。

假设您已经控制了C ++代码,我建议重构它以使Python可以以Python可以序列化和反序列化的形式使这个全局状态可见。然后,您可以在需要的过程之间传递状态(例如,使用multiprocessing中的一个队列类。)