2
我正在嘗試爲池中的進程分配不同的env變量。如何將不同的env變量分配給池中的不同進程?
我發現的唯一方法就是做某事。如下面的代碼:
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
感謝您的回答。然而,我有一些阻止我傳遞參數的理由......所以它只能通過env vars完成(甚至不允許管道)。 – stanleyli
你可以通過設置環境然後調用myfunc的包裝函數「myfunc_wrapper(myarg)」來解決這個問題嗎? – rkh