gpt4 book ai didi

python - python中 "bound"环境变量的安全方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:01 25 4
gpt4 key购买 nike

假设我们有一个库 A 女巫的行为取决于一些值环境变量。 A_CONFIG_PATH 实际上。我的一些任务使用这个库对每个任务都有不同的A_CONFIG_PATH。我在一个的方式

import os
import A

def task(**kw):
os.environ['A_CONFIG_PATH'] = '/home/me/current/task/config/path'
A.do_some_stuff(kw)

这很好,直到所有任务同步处理。但现在我需要此任务处理中的并发性。

那么我如何保证每个任务不会破坏另一个任务它自己的 A_CONFIG_PATH 如果我在单独的线程/进程中运行每个任务或类似的东西。

最佳答案

有几种方法可以解决这个问题:

  1. 在子进程中运行每个任务,而不是在不同线程中的一个进程中运行所有任务
  2. 更改任务以将 A_CONFIG_PATH 值作为参数,而不是从环境中读取它(从 env 中读取与依赖全局变量一样糟糕...)
  3. 不是将字符串分配给 os.environ[A_CONFIG_VALUE],而是使用 threading.local对象,它允许每个线程都有自己的值。不过,您需要稍微更改读取值的部分。

一个使用 threading.local 的例子:

#one time init
os.environ['A_CONFIG_PATH'] = threading.local()

# set the value
def task(**kw):
os.environ['A_CONFIG_PATH'].value = '/home/me/current/task/config/path'
A.do_some_stuff(kw)

# read the value
config_path = os.environ['A_CONFIG_PATH'].value

编辑:因为你说正在使用 os.getenv 读取环境变量,你可以将第三种解决方案与这个 hack 结合起来,用你自己的替换 os.getenv :

# one time init
orig_getenv = os.getenv
def getenv_hacked(key, default=None):
if key == 'A_CONFIG_PATH':
return orig_getenv(key, default).value
else:
return orig_getenv(key, default)
os.getenv = getenv_hacked
os.environ['A_CONFIG_PATH'] = threading.local()

关于python - python中 "bound"环境变量的安全方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21250645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com