【发布时间】:2014-07-25 08:51:16
【问题描述】:
我有这个代码:
import os
pid = os.fork()
if pid == 0:
os.environ['HOME'] = "rep1"
external_function()
else:
os.environ['HOME'] = "rep2"
external_function()
还有这段代码:
from multiprocessing import Process, Pipe
def f(conn):
os.environ['HOME'] = "rep1"
external_function()
conn.send(some_data)
conn.close()
if __name__ == '__main__':
os.environ['HOME'] = "rep2"
external_function()
parent_conn, child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
print parent_conn.recv()
p.join()
external_function 通过在环境变量HOME 中找到的目录中创建必要的子目录来初始化外部程序。这个函数在每个进程中只执行一次。
第一个示例使用os.fork(),目录按预期创建。但是对于使用multiprocessing 的第二个示例,只会创建rep2 中的目录。
为什么第二个示例不在rep1 和rep2 中创建目录?
【问题讨论】:
-
我无法重现您看到的问题。我写了一个
external_function像这样:def external_function(): print os.environ['HOME'],并发现multiprocessing示例打印出的正是我所期望的; 'rep1', 'rep2' 和我从conn.send发回的字符串都被打印出来了。 -
我想你会找到答案here。
-
我执行的函数是
getInstalledPackagesfrom github.com/vle-forge/pyvle/blob/master/src/pyvle.py。 -
@andi 这就是我的怀疑。如果你写一个答案,我会接受它。
-
我会这样做的。给我一分钟。
标签: python process multiprocessing fork python-multiprocessing