【发布时间】:2012-09-30 10:20:42
【问题描述】:
这里我有一个用 C++ 编写的函数调用 foo 并通过使用用 C 编写的 python 包装器 (wrapper.c) 使其可从 python 调用 (foo_wrapper)。
在 wrapper.c 中,我有一个静态全局变量“x”,由 foo 使用和更新。
现在,当我在一个进程中从 python 调用 foo 时,一切正常。
然而,当我在 python 中使用 multiprocess 模块时,即使 foo 是从主进程调用的,这个“x”值不是它应该的!调用过程是这样的:
P=Process(target=myf, args=(a,))
P.start()
foo_wrapper()
P.join()
我的问题是:当调用 fork() 时,即启动多个进程,python 如何处理父/子进程的堆栈或堆?我怎样才能使主进程(或父进程)的“x”值正确?
【问题讨论】:
-
'这个“x”值不应该是这样!!' ——你能再描述一下吗?它有什么问题?
-
x 被初始化一次。但是fork之后,主进程中的x值并没有加载,即和之前不一样了。
标签: python static-variables multiprocess