我有这个代码:
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()
The external_function
通过在环境变量中找到的目录中创建必要的子目录来初始化外部程序HOME
。该函数在每个进程中仅执行一次此工作。
对于第一个示例,它使用os.fork()
,目录按预期创建。但对于第二个例子,它使用multiprocessing
,只有目录rep2
被创建。
为什么第二个示例不在两者中创建目录rep1
and rep2
?
您正在寻找的答案已详细解决here https://stackoverflow.com/questions/2276117/python-multiprocessing-process-vs-standalone-python-vm。还有不同操作系统之间差异的解释。
一个大问题是fork
Windows 上不存在系统调用。因此,当运行Windows操作系统时,不能使用此方法。multiprocessing
是执行当前运行程序的一部分的高级接口。因此,它 - 就像分叉一样 - 创建进程当前状态的副本。也就是说,它会为您处理程序的分叉。
因此,如果有的话,您可以考虑fork()
用于分叉程序的较低级接口,以及multiprocessing
库成为分叉的更高级别接口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)