python - 如何将不同的环境变量分配给池中的不同进程?

标签 python multiprocessing

我试图将不同的环境变量分配给池中的进程。

我找到的唯一方法就是做某事。像下面的代码:

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/

相关文章:

python - 如何在 Django Admin 中实现计算模型属性的排序,而无需编写两次逻辑?

python - functools.partial 是否不适用于 multiprocessing.Pool.map?

python - 使用多处理附加值时获取空列表

python - 使用 Pandas 进行多处理时出现 "The process has forked"错误

python - 查找素数算法的时间复杂度

python - 加快 pandas 滚动窗口的速度

python - 从二维数组 python 中删除行(IndexError)

python - 是否有相当于 python 的 virtualenv 的 GO?

python - 如果我使用多处理,函数返回值类型错误

Python如何在类内部进行多处理?