Pytest Dask distributed.utils_test.client不';是否继承父进程环境变量?

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中,(人工设置的)环境变量对工作人员不可用。为什么?也许我可以告诉

我正在使用pytest测试我的dask工作流。我有一个特定的工作流,
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用作进程池(我没有做出架构决策),因此我们的代码都不支持异步。每个辅助任务都会阻塞,直到返回。