首页 > 解决方案 > python 中的进程是否有自己的 os.environ 副本?

问题描述

我想知道,python 中的进程是否有自己的副本os.environ?即os.environ从进程中设置是否安全,是否保证不会被另一个进程覆盖?

import os
import time
import random
from multiprocessing import Process


def f1(i):
    time.sleep(random.randint(0,3))

    os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
    os.environ['CUDA_VISIBLE_DEVICES'] = str(i)
    print('i:', i)

    time.sleep(random.randint(0, 3))

    print('i:', i, "os.environ['CUDA_VISIBLE_DEVICES']", os.environ['CUDA_VISIBLE_DEVICES'])



def run_me():
    n = 3
    process_list = []
    for i in range(n):
        p = Process(target=f1, args=(i,))
        p.start()
        process_list.append(p)

    for p in process_list:
        p.join()


if __name__ == "__main__":
    run_me()

输出示例:

i: 2
i: 0
i: 0 os.environ['CUDA_VISIBLE_DEVICES'] 0
i: 2 os.environ['CUDA_VISIBLE_DEVICES'] 2
i: 1
i: 1 os.environ['CUDA_VISIBLE_DEVICES'] 1

标签: pythonprocessmultiprocessing

解决方案


不允许任何进程修改另一个进程的环境变量,并且每个进程都有自己的环境变量的新副本。除非另有说明,否则它将最初包含父进程的环境变量的副本。


推荐阅读