Pytest Dask distributed.utils_test.client不';是否继承父进程环境变量?
我正在使用pytest测试我的dask工作流。我有一个特定的工作流,Pytest Dask distributed.utils_test.client不';是否继承父进程环境变量?,pytest,dask,dask-distributed,Pytest,Dask,Dask Distributed,我正在使用pytest测试我的dask工作流。我有一个特定的工作流,ingest_l0_files,它使用客户机将任务分配给工人。在测试期间,我需要人为地设置一个目录路径,该路径是在名为CURRENT\u RUN\u LOG\u path的环境变量中设置的。重要的是,此设置在集成测试和实际运行期间可以完美地工作;我在驱动程序脚本中设置了环境变量,我的所有工作人员都可以访问它(因为他们大概是从主进程派生的)。但是,在我的pytest中,(人工设置的)环境变量对工作人员不可用。为什么?也许我可以告诉
ingest_l0_files
,它使用客户机
将任务分配给工人。在测试期间,我需要人为地设置一个目录路径,该路径是在名为CURRENT\u RUN\u LOG\u path
的环境变量中设置的。重要的是,此设置在集成测试和实际运行期间可以完美地工作;我在驱动程序脚本中设置了环境变量,我的所有工作人员都可以访问它(因为他们大概是从主进程派生的)。但是,在我的pytest中,(人工设置的)环境变量对工作人员不可用。为什么?也许我可以告诉我的utils\u test.client
重新初始化它的环境,然后将它传递给它的工作人员
from distributed.utils_test import client
def test_ingest_l0_files(client, clean_database_fixture, tmpdir):
"""Test the workflow function `ingest_l0_files`"""
os.putenv('CURRENT_RUN_LOG_PATH', f'{tmpdir}')
get_config('CURRENT_RUN_LOG_PATH')
client = client()
unique_obs = workflow.ingest_l0_files([L0_ALL_FILE, L0_LPT_FILE], client)
assert len(unique_obs) == 20
os.unsetenv('CURRENT_RUN_LOG_PATH')
正确的是,
客户端
pytestfixture不是特别可扩展的
如果您熟悉异步编程,那么我推荐@gen_cluster
装饰器,它提供了更多选项:
@gen_cluster(
client=True,
Worker=Nanny,
worker_options={"env": {"FOO": "BAR"}},
)
async def test_foo(client, scheduler, worker_a, worker_b):
await ...
但这需要您的代码是异步友好的,这可能是也可能不是。如果调用非异步方法,那么此测试将无效地阻塞
您认为
客户端
pytest夹具不是特别可扩展的,这是正确的
如果您熟悉异步编程,那么我推荐@gen_cluster
装饰器,它提供了更多选项:
@gen_cluster(
client=True,
Worker=Nanny,
worker_options={"env": {"FOO": "BAR"}},
)
async def test_foo(client, scheduler, worker_a, worker_b):
await ...
但这需要您的代码是异步友好的,这可能是也可能不是。如果调用非异步方法,那么此测试将无效地阻塞
我们实际上只是将Dask用作进程池(我没有做出架构决策),因此我们的代码都不支持异步。每个辅助任务都会阻塞,直到返回。我们实际上只是将Dask用作进程池(我没有做出架构决策),因此我们的代码都不支持异步。每个辅助任务都会阻塞,直到返回。