避免 multiprocessing.Pool 到 运行 全局变量

Avoid multiprocessing.Pool to run Globals

我目前在 Python 工作。我需要使用 multiprocessing.Pool 并将当前工作目录设置为 file 目录,然后将父目录添加到 sys.path。问题是,当 multiprocessing.Pool 启动时,它再次运行我想避免的 sys.path.insert(0,'..') 行。有什么方法可以使 multiprocessing.Pool 不是 运行 全局变量或 if __name__ == "__main__": 代码片段之外的任何东西?

import os
import sys
import multiprocessing

os.chdir(sys.path[0])
sys.path.insert(0,'..')
print(os.getcwd())

def Worker(j):
    pass

if __name__ == "__main__":
    with multiprocessing.Pool(1) as p:
        p.map(Worker, range(10))
        p.close()
        p.join()

所以 multiprocessing 的工作方式是,当它到达 p.map(Worker, range(10)) 行时,它会启动一个新的子进程,并且 运行 整个脚本 再次从第 1 行开始(新的子进程将导入调用模块)。 if 下的行不会在子进程中再次 运行。为避免 sys.path.insert(0,'..') 在子进程中重复,您需要将该行放在 if.

有关详细信息,请参阅 this

import os
import sys
import multiprocessing


def Worker(j):
    pass

if __name__ == "__main__":
    os.chdir(sys.path[0])
    sys.path.insert(0,'..')
    print(os.getcwd())

    with multiprocessing.Pool(1) as p:
        p.map(Worker, range(10))
        p.close()
        p.join()