[英]python 3.4 multiprocessing - change ld_library_path for different processes
I'm using python multiprocessing module to call a python function in separate process, and I want a different value for the environment variable $LD_LIBRARY_PATH
for this processes. 我正在使用python多处理模块在单独的进程中调用python函数,并且我希望该进程的环境变量$LD_LIBRARY_PATH
具有不同的值。 Specifically, I need to append a string to the existing value before the process refers to it. 具体来说,我需要在流程引用它之前将字符串附加到现有值。 An example code is shown below: 示例代码如下所示:
import os
from multiprocessing import Process
import sys
orig_env = os.environ['LD_LIBRARY_PATH']
def startProc_A():
a_env = orig_env + 'path/1'
os.environ['LD_LIBRARY_PATH'] = a_env
print(os.environ['LD_LIBRARY_PATH'])
sys.path.append('path/1')
new_proc = Process(target = func_A, args=(0,))
new_proc.start()
def func_A():
import module_A
In the print statement, I can see that os.environ['LD_LIBRARY_PATH']
has been correctly updated, however, my process is still referring to the value that it had when python was started , meaning that module_A is still referring to the old LD_LIBRARY_PATH
在print语句中,我可以看到os.environ['LD_LIBRARY_PATH']
已正确更新,但是, 我的进程仍在引用python启动时的值,这意味着module_A仍在引用旧的LD_LIBRARY_PATH
Is there a way to update this value dynamically within the script. 有没有一种方法可以在脚本中动态更新此值。
RSVP. 敬请回复。 Thanks 谢谢
The documentation for os.putenv() includes the text: os.putenv()的文档包括以下文本:
"... Such changes to the environment affect subprocesses started with os.system(), popen() or fork() and execv()" “ ...对环境的此类更改会影响以os.system(),popen()或fork()和execv()开头的子流程”
So, you can do it like this: 因此,您可以这样做:
import os
def func_A():
print os.environ['LANG']
os._exit(0)
orig_env = os.environ['LANG']
a_env = orig_env + 'something_else'
os.environ['LANG'] = a_env
newpid = os.fork()
if newpid == 0: # this is the child process
func_A()
... or (maybe better) after the fork() call, like this: ...或(也许更好)在fork()调用之后,如下所示:
import os
def func_A():
print os.environ['LANG']
os._exit(0)
newpid = os.fork()
if newpid == 0: # this is the child process
orig_env = os.environ['LANG']
a_env = orig_env + 'something_else'
os.environ['LANG'] = a_env
func_A()
(edit) Also the following does appear to work: (编辑)以下似乎也起作用:
module_A.py: module_A.py:
import os
import sys
def func_from_module_A():
print os.environ['LANG']
print sys.path
os._exit(0)
main.py: main.py:
import os
import sys
def startProc_A():
newpid = os.fork()
if newpid == 0: # this is the child process
orig_env = os.environ['LANG']
a_env = orig_env + 'something_else'
os.environ['LANG'] = a_env
sys.path.append("road_to_nowhere")
func_A()
def func_A():
import module_A
module_A.func_from_module_A()
startProc_A()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.