Hun*_*nsu 4 python fork process multiprocessing python-multiprocessing
我有这个代码:
import os
pid = os.fork()
if pid == 0:
os.environ['HOME'] = "rep1"
external_function()
else:
os.environ['HOME'] = "rep2"
external_function()
Run Code Online (Sandbox Code Playgroud)
而这段代码:
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()
Run Code Online (Sandbox Code Playgroud)
将external_function通过建立在环境变量中找到的目录必要的子目录初始化一个外部程序HOME.此功能仅在每个过程中执行一次.
使用第一个示例,可以os.fork()按预期创建目录.但是使用第二个例子,multiprocessing只有rep2get创建的目录.
为什么没有第二个例子中创建两个目录rep1和rep2?
小智 6
您正在寻找的答案在此处详细说明.还解释了不同OS的差异.
最大的问题是forkWindows上不存在系统调用.因此,在运行Windows操作系统时,您无法使用此方法.multiprocessing是执行当前正在运行的程序的一部分的更高级别的接口.因此,它 - 像分叉一样 - 创建过程当前状态的副本.所以说,它会照顾你的程序分叉.
因此,如果可用,您可以考虑fork()使用较低级别的接口来分支程序,并将多进程库作为分叉的更高级别接口.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
9095 次 |
| 最近记录: |