我想知道,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
不允许任何进程修改另一个进程的环境变量,并且每个进程都有自己的环境变量的新副本。除非另有说明,否则它将首先包含父进程的 env var 的副本。