1

在这里,我有一个用 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”值正确?

4

1 回答 1

0

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

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

于 2012-10-10T02:20:08.600 回答