我有这个代码:
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
?
你正在寻找的答案是详细讨论这里。也有不同操作系统之间差异的解释。
一个大问题是fork
Windows上不存在系统调用。因此,在运行Windows操作系统时,不能使用此方法。multiprocessing
是用于执行部分当前正在运行程序的高级接口。因此,它(像分叉一样)创建了您进程当前状态的副本。也就是说,它可以为您分担程序的开销。
因此,如果可用,您可以考虑fork()
对程序进行分叉的较低级别的接口,而将multiprocessing
库视为对程序进行分叉的较高级别的接口。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句