避免 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()
我目前在 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()