python - 如何在 Python 中设置线程特定的环境变量?

标签 python multithreading environment-variables

我想创建两个(或更多)线程并在每个线程中执行不同的外部程序,比方说 aaabbb。这些外部程序需要位于不同目录的库,比方说在 /aaalib/bbblib 中,所以我必须先设置环境变量 LD_LIBRARY_PATH执行他们。我想避免使用 shell,因此执行 LD_LIBRARY_PATH=/aaalib aaa 之类的解决方案并不好。

问题是:如何设置 os.environ['LD_LIBRARY_PATH'] 使其在不同的线程中具有不同的值?

附言。我尝试了 os.environ['...'] = threading.local() 描述的解决方案 here ,但它以下列方式失败:

In [1]: import os, threading
In [2]: os.environ['LD_LIBRARY_PATH'] = threading.local()
-----------------------
TypeError           Traceback (most recent call last)
<ipython-input-2-a2c8ef0b901b> in <module>()
----> 1 os.environ['LD_LIBRARY_PATH'] = threading.local()
/usr/lib/python2.7/os.pyc in __setitem__(self, key, item)
471                 self.data = environ
472             def __setitem__(self, key, item):
--> 473                 putenv(key, item)
474                 self.data[key] = item
475             def update(self,  dict=None, **kwargs):
TypeError: must be string, not thread._local

最佳答案

您可以尝试使用 subprocess 模块并执行如下操作:

import subprocess
import os

env = os.environ.copy()
env['LD_LIBRARY_PATH'] = '/aaalib'
aaa_process = subprocess.Popen(['aaa'], env=env)

env = os.environ.copy()
env['LD_LIBRARY_PATH'] = '/bbblib'
bbb_process = subprocess.Popen(['bbb'], env=env)

关于python - 如何在 Python 中设置线程特定的环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38348556/

相关文章:

Python 断言属性集

Python 安装 'asyncio' 错误 : cl. exe 失败,退出状态 2

java - 线程从 arrayList 中删除并插入函数

java - Thread 的 run() 方法中的最终枚举

multithreading - Ccriticalsection 在生产中是否可用?

bash - 从 Docker 容器中获取环境变量

python - 如何在 Python 或 R 中获取用于选择主成分数量的 BIC/AIC 图

python - 无法存储石头剪刀布游戏的结果

java - 无法在 Mac Lion 上升级 Maven - 环境变量

php - 如何在 Laravel 5 中重新生成 APP_KEY 并设置新密码