Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以线程方式与DASK并行打开文件+;CFGrib真的很慢_Python_Dask_Cfgrib - Fatal编程技术网

Python 以线程方式与DASK并行打开文件+;CFGrib真的很慢

Python 以线程方式与DASK并行打开文件+;CFGrib真的很慢,python,dask,cfgrib,Python,Dask,Cfgrib,我一直在使用以下代码构建一个GRIB文件读取工具。我有异构文件,所以不能使用xarray.open_mfdataset或类似的东西 def create_open_delays(file_list: List[str],expected_dataset_count:int) -> List[Delayed]: """ This function runs through list of files and creates a list

我一直在使用以下代码构建一个GRIB文件读取工具。我有异构文件,所以不能使用xarray.open_mfdataset或类似的东西

def create_open_delays(file_list: List[str],expected_dataset_count:int) -> List[Delayed]:
    """
    This function runs through list of files and creates a
    list of delayed open commands.
    """
    return [
        dask.delayed(cfgrib.open_datasets,nout=expected_dataset_count)(file,
                                           backend_kwargs={
                                               "indexpath": ""
                                           },
                                           cache=True) for file in file_list
    ]
在运行代码时,我注意到线程并行运行的性能比完全进程并行运行的性能降低了10倍(每个Dask工作线程只有一个线程)。我猜这和吉尔有关,我猜对任何人来说都不会感到意外。DASK文档确实强调了这是一个优化机会。拥有如此多的工作人员有一些缺点,因为他们现在的内存有限,启动所有工作人员会带来额外的开销,更不用说更多的进程通信了。每个任务大约需要10秒钟,因此我不担心Dask.delayed的过度使用

我有两个问题:

  • 在下面的CFGrib/Eccodes包中有什么可以提高多线程性能的方法吗?据我模糊的理解,numpy等在底层编译代码中采取步骤来发布GIL
  • 是否可以利用DASK中新的asyncIO python功能?(我不是要求任何人立即开发,我只是想知道这样的东西是否存在或正在进行中,这是否是一个愚蠢的想法)

  • 谢谢。

    如果你还没有看过,我建议你看看Xarray,至少看看他们是如何处理Grib的。

    如果你还没有看过,我建议你看看Xarray,至少看看他们是如何处理Grib的。

    问题是我有异构的Grib文件。xarray接口允许您进行过滤,但这样做13次会变得非常不方便。根据我对xarray和CFGrib源代码的理解,带有CFGrib后端的xarray函数最终使用的函数与CFGrib对应的函数大致相同。对于dask端,您还有什么其他提示吗?我可以只使用每个核心一个进程,但该程序将训练一个神经网络,它在多线程上的性能会更好。有更好的办法吗?谢谢你的提示:)问题是我有异构的Grib文件。xarray接口允许您进行过滤,但这样做13次会变得非常不方便。根据我对xarray和CFGrib源代码的理解,带有CFGrib后端的xarray函数最终使用的函数与CFGrib对应的函数大致相同。对于dask端,您还有什么其他提示吗?我可以只使用每个核心一个进程,但该程序将训练一个神经网络,它在多线程上的性能会更好。有更好的办法吗?谢谢你的提示:)