我有这段代码:
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
中创建目录?
最佳答案
您正在寻找的答案已在详细地址 here 中找到.还有对不同操作系统之间差异的解释。
一个大问题是 fork
系统调用在 Windows 上不存在。因此,当运行 Windows 操作系统时,您不能使用此方法。 multiprocessing
是一个高级接口(interface),用于执行当前正在运行的程序的一部分。因此,它 - 就像 fork 一样 - 创建您的进程当前状态的副本。也就是说,它负责为您 fork 程序。
因此,如果可用的话,您可以考虑将 fork()
视为 fork 程序的低级接口(interface),而将 multiprocessing
库作为 fork 的高级接口(interface).
关于python - os.fork 和 multiprocessing.Process 之间的行为差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24041935/