如何从异步函数调用 Polars Rust API?

问题描述 投票:0回答:1

我有一个 axum 服务器需要从 S3 扫描一些 parquet 文件。当一切都同步时,效果很好:

pub fn lazyframe_from_s3_key(key: &str) -> Result<LazyFrame> {
    let access_key_id = std::env::var("aws_access_key_id")?;
    let secret_access_key = std::env::var("aws_secret_access_key")?;
    let region = std::env::var("aws_region")?;
    let cloud_options = cloud::CloudOptions::default().with_aws([
        (Key::AccessKeyId, access_key_id),
        (Key::SecretAccessKey, secret_access_key),
        (Key::Region, region),
    ]);
    let mut args = ScanArgsParquet::default();
    args.cloud_options = Some(cloud_options);
    let df = LazyFrame::scan_parquet(key, args)?
        .with_streaming(true)
        .select([all()]);
    Ok(df)
}

但是,一旦我将其设为异步并尝试从 tokio 管理的异步函数调用它,我就会收到“无法从运行时内启动运行时”错误,因为 scan_parquet 调用 block_on。有什么办法可以解决这个问题吗?

asynchronous rust rust-polars
1个回答
0
投票

我得出的结论是,没有办法以异步方式干净利落地与极坐标交互,并且每次调用使用并行性的极坐标函数时,都必须求助于 tokio::task::spawn_blocking 。

© www.soinside.com 2019 - 2024. All rights reserved.