我试图将不同的环境变量分配给池中的进程。
我找到的唯一方法就是做某事。像下面的代码:
import os, multiprocessing
def init(env):
os.environ = env
os.environ['FOO'] = "foo_1"
def myfunc():
print os.environ['FOO']
if __name__ == "__main__":
child_env = os.environ.copy()
child_env['FOO'] = "foo_2"
pool = multiprocessing.Pool(initializer=init, initargs=(child_env,))
child_env['FOO'] = "foo_3"
for i in xrange(3):
pool.apply_async(myfunc,()) # How to modify this line?
pool.close()
pool.join()
通过这样做,池中的所有进程共享相同的环境变量 os.environ['FOO'] = "foo_1"
因为它们共享相同的初始化程序。如何为不同的进程为 FOO
分配不同的值?
以上代码的输出:
foo_1
foo_1
foo_1
最佳答案
您可以向每个参数传递参数,而不是不向 myfunc 传递参数:
def myfunc(myarg):
child_env = os.environ.copy()
child_env['FOO'] = "foo_{}".format(myarg)
print child_env['FOO']
if __name__ == "__main__":
child_env = os.environ.copy()
child_env['FOO'] = "foo_2"
pool = multiprocessing.Pool(initializer=init, initargs=(child_env,))
child_env['FOO'] = "foo_3"
for i in xrange(3):
pool.apply_async(func=myfunc, kwds=dict(myarg=i)) # How to modify this line?
pool.close()
pool.join()
我认为这至少会让您完成一半。子函数现在负责在需要时修改其本地环境(也许它正在运行一些需要它的子进程)。
关于python - 如何将不同的环境变量分配给池中的不同进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33534468/