Dask 在xarray中计算互相关函数

我有一个带有 Dimensions: (space: 726, time: 579) Coordinates: * space (space) MultiIndex - latitude (space) float64 -90.0 -82.5 -82.5 -82.5 -82.5 -82.5 -82.5 ... - longitude (space) float64 0.0 0.0 60.0 120.0 180.0 240.0 300.0 0.0 30.0 ...

如何构造一个Dask应用程序来处理来自队列的固定数量的输入?

我们有一个实现以下内容的要求。给定将提供已知数量消息的Redis通道: 对于从通道消耗的每条消息: 从Redis获取JSON文档 解析JSON文档,提取结果对象列表 跨所有结果对象聚合以生成单个结果 我们希望将步骤1和步骤2分发给许多工作人员,并避免将所有结果收集到内存中。我们还希望显示这两个步骤的进度条 然而,我们无法找到一种很好的方法来构造应用程序,这样我们就可以看到进展并在系统中保持工作的进行,而不会因为不合适的时候而阻塞 例如,在步骤1中,如果我们从Redis通道读入一个队列,那么我

在Dask集合中获取所有期货的最佳方式

如果有一个Dask集合d依赖于一些持久化的内容,那么获得d所依赖的所有未来的列表的最佳方法是什么?您可能需要该函数 dask.distributed.client.futures_of 它也可以作为客户端的方法提供

类方法在dask中是纯的吗?

这在Dask中是否有效使用了pure 假设在计算过程中,bar从未更改,但在我设置计算时它可能会更改 from dask import delayed class a: def __init__(self): self.bar = 1 def foo(self, b): return self.bar + b def dask_foo(self, b): return delayed(self.foo, pure=Tru

Dask计算图是否可以保留中间数据,因此无需重新计算?

我对Dask印象深刻,我正在尝试确定它是否是解决我问题的正确工具。我正在构建一个交互式数据探索项目,用户可以交互地更改图形的参数。有时这些更改需要重新计算整个管道以生成图形(例如“显示来自不同时间间隔的数据”),但有时不需要。例如,“更改平滑参数”不应要求系统重新加载未平滑的原始数据,因为基础数据是相同的,只有处理过程发生了更改。系统应改为使用已加载的现有原始数据。我希望我的系统能够保留中间数据对象,并根据数据可视化的哪些参数已更改,智能地确定需要重新运行图形中的哪些任务。看起来Dask中的缓存

Dask客户端在Docker容器内运行时无法连接到群集

我正在Kubernetes命名空间中运行Dask网关。我能够使用以下代码连接到网关,而不是在Docker容器中运行 from dask.distributed import Client from dask_gateway import Gateway gateway = Gateway('http://[redacted traefik ip]') cluster = gateway.new_cluster() 但是,当我从Docker容器运行相同的代码时,我在gateway.new\u

Dask 编写netCDF文件非常慢

我试图在数据集上执行一个相当简单的操作,包括编辑每个3.5GB的netcdf文件上的变量和全局属性。使用xr.open\u dataset立即加载文件,但是dataset.to\u netcdf()太慢,修改后无法导出。 我试过: 无需重新调整和dask调用 不同的块大小,后跟: 在之前使用load()加载到\u netcdf 在之前使用persist()或compute()来 我在一个HPC上工作,有10个分散的工人。在所有情况下,每个文件所用的时间都超过15分钟。这是预期的吗?除了使用das

覆盖dask调度程序\u端口

我尝试了几个端口都没有成功:8787确实在忙着为rstudio服务。我可以重定向rstudio,但是下面的工作不应该吗 from distributed import Client, LocalCluster cluster = LocalCluster( scheduler_port = 8785 , n_workers = 2 ) 错误: /home/ec2-user/anaconda3/lib/python3.6/site-packages/distributed/bokeh/core.

Dask 延迟缓存

关于将缓存集成到dask延迟图中,目前的技术状况如何?我有一些大型图,这些图的路径将从持久缓存(如磁盘)中获益匪浅,并且在每次单独运行图(如跨处理)时,都会通过参数进行散列 我的期望是有一个api,我可以在图形优化阶段与之集成,在适当的情况下用从磁盘加载的常量替换节点。看来cachey应该是我的切入点,但我还不能让它与纯dask延迟示例一起工作。是的,cachey可能可以处理这个问题。您可能指的文档页面如下: 如果有一个特定的bug,我建议您打开bug报告

Dask 演员和达斯克工人

一切都很好,但是如果客户端重新启动呢?我怎样才能拿到票 从名为忍者的工作人员那里回来的演员?到2019-03-06年,没有面向用户的方法可以做到这一点 我建议提出一个特性请求问题 client = Client('127.0.0.1:8786',direct_to_workers=True) future1 = client.submit(Counter, workers= 'ninja',actor=True) counter1 = future1.result()

Dask:如果运行工人的作业被终止(例如,由于超时),工人是否重新启动

我在PBS集群上运行Dask。我的节点是由于服务器负载的波动而需要不确定时间的下载。我已经设置了相当大的墙时间(例如4小时)的作业,这些作业应该能够包含许多单独的节点/下载。然而,我有数以万计的下载,所以在所有下载完成之前,作业将超时 两个问题: 当使用PBSCluster.scale(n)启动作业时,当作业超时时,是否会自动启动新作业以取代它们 当一个作业死亡(例如由于超时)时,在该作业上运行的节点是在另一个作业上重新启动的,还是丢失的 谢谢 当使用PBSCluster.scale(n)启动作

Dask 将PBSCluster与多个节点一起使用时出错

在PBS集群上使用dask客户机运行xarray时,我遇到了一些奇怪的行为。 当选择多个节点(aka-cluster.scale())时,进程会不断失败,并提示下面的错误。 奇怪的是,当只运行一台1机器“cluster.scale(1)”时,进程运行平稳 传唤工人守则- ''' ''' 错误- ''' ''我建议尝试提供一个最小的可复制示例。乍一看,您的错误似乎与dask作业队列无关。我会尝试看看是否可以用LocalCluster复制它。如果您还没有更新dask,我也建议您进行更新。 clust

配置Dask客户端并重新构造代码以并行化任务

我们有一个处理图像的代码,这涉及到运行和删除图像。 由于我们有数百万张图像,我们想用Dask并行处理我们的任务。我们的问题是,尽管我们设法在图像的子集上运行代码,但当放大(在我们的纱线簇上运行大量数据)时,代码崩溃。 我们试图以各种方式配置客户端,但找不到正确的配置。 我们的图像存储在拼花文件中(这是我们接收它们的方式)。下面是在客户端上下文管理器中运行的代码: def hex-to-img(hex-data:str)->图像: 尝试: bin\u数据=字节。从十六进制(十六进制数据) 流=io

Dask数据帧上的值错误

我正在使用dask读取csv文件。但是,由于以下错误,我无法对其应用或计算任何操作: 您知道这个错误是怎么回事吗?如何修复它?在dask中读取csv文件时,如果无法识别正确的列数据类型,就会出现错误 例如,我们使用dask读取csv文件,如下所示: import dask.dataframe as dd df = dd.read_csv('\data\file.txt', sep='\t', header='infer') 这将提示上述错误 为了解决这个问题,@mrocklin在这个评论中建

使用dask就地计算 短版

我有一个dask数组,它的图形最终基于底部的一组numpy数组,并对它们应用元素操作。使用da.store计算数组并将结果存储回原始备份numpy数组是否安全,从而使整个过程成为就地操作 如果您认为“您使用的dask是错误的”,那么请参阅下面的详细版本,了解我为什么觉得有必要这样做 长版本 我将dask用于一个应用程序,其中原始数据来自内存中的numpy数组,该数组包含从科学仪器收集的数据。目标是用原始数据填充大部分RAM(比如75%+),这意味着没有足够的内存来创建内存中的副本。这使得它在语义

有没有办法知道dask工作程序是在CPU设备上运行还是在GPU设备上运行。?

假设一个dask集群有一些CPU设备和一些GPU设备。每个设备运行一个dask工作进程。现在,问题是我如何发现dask工作程序的底层设备是CPU或GPU 例如:-如果dask工作程序在CPU设备上运行,我应该知道它在CPU上运行,或者如果dask工作程序在GPU设备上运行,我应该以编程方式知道设备类型。有什么方法可以通过编程来了解这一点吗?上面评论中的链接答案是关于提前按资源标记不同的工人,然后根据他们可能需要的资源分配任务 相反,也许您希望以异构的方式运行计算,也就是说,您不介意哪个任务可以在

异步实时并行分布式Dask

我正在阅读关于dask.distributed的文档,看起来我可以通过client.submit()向分布式集群提交函数 我有一个现有函数some_func,它异步抓取单个文档(比如,文本文件),我想获取原始文档,抓取所有不包含元音的单词,并将其推回到另一个数据库中。此数据处理步骤是阻塞的 假设有数百万个文档,分布式集群只有10个节点和1个可用进程(即一次只能处理10个文档),dask.distributed将如何处理需要处理的文档流 下面是一些示例代码: client = dask.distr

使用Dask_xgboost-train方法时,Dask挂起

我试图从位于的dask ml文档中复制dask xgboost示例。不幸的是,Dask似乎没有完成培训,我很难找到错误和警告的含义。这是我的密码: def main(): cluster = LocalCluster() dask_client = Client(cluster) x, y = make_classification(n_samples=1000, n_features=10, chunks=10, n_informative=4, random_sta

Dask client.upload_file()用于嵌套模块

我有一个项目结构如下 - topmodule/ - childmodule1/ - my_func1.py - childmodule2/ - my_func2.py - common.py - __init__.py client = Client(YarnCluster()) client.submit(MyFuncClass1.execute) 在Dask集群边缘节点上的Jupyter笔记本中,我正在执行以下操作 from topm

Dask客户端检测本地默认群集已在运行

这有可能吗?您不应该在同一个Python会话中创建多个客户端。也许有必要更深入地了解为什么您要多次给客户打电话 如果已经有一个Dask群集在默认地址上运行,则可以设置Dask_调度程序_地址环境变量,该变量将指示客户端在那里查看,而不是创建本地群集 from dask.distributed import Client Client() Client(do_not_spawn_new_if_default_address_in_use=True) # should not spawn a n

AttributeError:模块“dask”没有属性“delayed”

使用Pycharm社区2018.1.4 Python 3.6 Dask 2.8.1 尝试在我的一些方法上实现dask延迟,但出现错误 AttributeError: module 'dask' has no attribute 'delayed'. 这显然不是真的,所以我想知道我做错了什么。我的实施结构如下: 进口达斯克 def总管 对于enumaratefilenames中的i,fn: 数据={} 对于0,2范围内的x: data.updatedask.delayedload_datafn,

使用多列作为索引旋转dask数据帧

我有以下格式的Dask数据帧: date hour device param value 20190701 21 dev_01 att_1 0.000000 20190718 22 dev_01 att_2 20.000000 20190718 22 dev_01 att_3 18.611111 20190701 21 dev_01 att_4 18.706083 20190718 22 dev_01 att

Dask pyarrow-识别写入拼花地板数据集时使用的片段或过滤器?

我的用例是,我希望将文件路径或过滤器作为xcom传递给Airflow中的任务,以便我的下一个任务可以读取刚刚处理的数据 任务A将表写入分区数据集,并生成大量拼花文件片段-->任务B稍后将这些片段作为数据集读取。不过,我只需要读取相关数据,而不需要读取可能有数百万行的整个数据集 我测试了两种方法: 在我完成写入数据集后立即列出修改过的文件。这将为我提供一个路径列表,我可以在下一个任务中调用ds.dataset(路径)。我可以在这些路径上使用partitioning.parse(),或者检查片段以获

如何以编程方式获取Dask用户界面url

我正在使用Dask纱线创建这样的应用程序: spec = skein.ApplicationSpec( ... ) cluster = YarnCluster.from_specification(spec) client = Client(cluster) 通常,我会从命令行运行warn application-list,并获取指向Skein web UI的应用程序跟踪URL。我想通过编程将此url放入日志中。我看到Skein通过applicationclient对象()提供了这一点,但我不

如何在分布式dask数组中找到最小的n值

我有一个分布式dask阵列,形状(2400)和chunksize(100100)。我想我可以用topk(-n)来找到最小的n值。但是,它似乎返回了一个形状数组(2400,n),因此它似乎在每一行中找到了最小的n。有没有办法使用topk在所有行(整个数组)中获得最小的n值 一个想法是调用topk两次,每个轴调用一次 >>> dist dask.array<pow, shape=(2400, 2400), dtype=float64, chunksize=(100, 100)

使用Dask从多个Python进程编写拼花文件

可以用Python从不同的进程中编写相同的拼花文件夹吗 我使用的是fastparquet 这似乎是可行的,但我想知道,如果两个进程同时向它写入数据,那么\u元数据文件怎么可能没有冲突 此外,为了使其正常工作,我必须使用ignore_divisions=True,这对于以后读取拼花地板文件时获得快速性能来说并不理想,因为Dask会整合单独进程中的元数据,以便在其余进程完成后,它只写入\u metadata文件,而这是在单个线程中发生的 如果使用自己的多处理设置将单独的拼花地板文件写入单个文件夹,则

分布式dask调度程序节点是否需要与工作节点相同的环境?

当使用基本CLI方法(即dask调度程序、dask工作程序)设置分布式dask群集时,dask调度程序节点是否也需要与工作程序节点相同的环境(例如包)?我有一个docker swarm,其中NVIDIA Jetson AGX(Arm64v8+GPU)单元作为工作单元,Intel x86-64服务器作为调度程序(无GPU),因此要拥有相同的环境并不容易(如果不可能的话)。请求将主要来自Jetson单位提供的Jupyter笔记本电脑。因此,请求和计算环境是相同的(不同的容器,但图像相同),只是调度程

合并多个dask.DataFrames更快?

假设您有10个不同的ddf,它们都有相同的索引,是否有比这更快的选项将其全部合并在一起 # Pseudo code ddfs_to_be_merged = [] ddfs_to_be_marged.append(ddf_with_same_index1) ddfs_to_be_marged.append(ddf_with_same_index2) ddfs_to_be_marged.append(ddf_with_same_index3) target = dd.DataFrame() #

使用Dask compute或持久化Dask延迟时内存膨胀

我试图在一个数据帧中处理多个主题的数据。每个主题有>30个主题和14个计算。这是一个大数据集,但超过5个会占用调度程序节点上的内存,而没有在与调度程序相同的节点上运行任何工作程序。是否有128gb的内存?如果我做错了什么,你知道我该怎么做吗?代码:贝娄 def channel_select(chn,sub): subject = pd.DataFrame(df.loc[df['sub'] == sub]) subject['s0'] = subject[chn] val

如何从dask数据帧/系列中删除INF?

我有一个dask系列,我需要从中删除INF和NAN.dropna()仅删除NAN。在numpy/pandas中,我会做一些类似于result=result[np.isfinite(result)]的事情。dask land的推荐等效物是什么?使用布尔数组索引dask对象会导致错误。有没有办法告诉dask应该将inf或-inf视为空值,例如?您应该避免使用NumPy函数。这些将触发计算和未来的dask。数据帧操作将对使用这些结果犹豫不决 相反,请使用等效的dask.array函数。这里是一个最小的

在dask分布式系统中,当计算速度比传输速度快时,如何复制数据?

我有一个较大的对象(150MB),需要广播给所有dask分布式工作者,以便在将来的任务中使用。我尝试了几种方法: Client.scatter(broadcast=True):这需要从一台机器(我正在运行客户端和调度程序)发送所有数据,这会造成带宽瓶颈 Client.submit后接Client.replicate:这些工作人员共享一个文件系统,因此我可以安排加载数据的任务,然后将数据复制到所有工作人员,而不是发送数据。这似乎使用了一种树策略来分发数据,这比前面的选项更快 但是,强制每个工作

将dask_cudf分区加载到GPU内存时,每个分区的开销是多少?

PCIE总线带宽延迟强制限制应用程序向GPU复制数据以及从GPU复制数据的方式和时间 当直接使用cuDF时,我可以有效地将单个大数据块移动到单个数据帧中 当使用dask_cudf对我的数据帧进行分区时,dask是否将分区一次复制到GPU内存中?成批?如果是这样的话,多个拷贝操作而不是单个较大的拷贝是否会产生很大的开销?这可能取决于您使用的调度程序。自2019年2月19日起,dask cudf默认使用单线程调度程序(如果在多线程中使用,cudf会出现一段时间故障),因此,如果您不使用某些dask.

Dask 如何确定重复(意外)`repartition split repartition merge`任务的原因?

在Dask通过ddf.visualize()输出的任务图中,我看到许多*-repartition-split-repartition-merge任务,其中*可以是join、rename或我从应用程序中识别的其他任务 我试图确定这些数据来自何处,它们是否会对性能产生影响(我想象不断地重新划分/分割/合并数据会带来成本,而不会直接帮助我实现计算目标),如果是,我如何删除它们 在distributed提供的performance\u报告中,它们似乎占据了计算时间的主导地位 查看Dask源代码,我可以在

使用Xarray和Dask在Datarray上运行循环以获得非常慢的迭代

我试图从u和v分量计算一年数据的风速,时间步长为每小时,分辨率为0.1 x 0.1度,总共40年。1年内的单个u和v netcdf文件约为5GB。我已经实现了一个基本的for循环,其中每年的u和v netcdf文件通过Xarrayopen_dataset打开,并重新调整以将其作为dask数组,然后进行计算,并将结果导出为新的netcdf。 当循环运行时,第一次迭代几乎是瞬间发生的,但是下一次迭代花费的时间太长(几乎到了它似乎停止的程度)。我不明白我的代码的哪一部分在这里是瓶颈,为什么。任何帮助都

Dask 达斯克-吉尔控股公司

我有三台机器 16芯32GB 其中一台机器是调度程序和工作程序 当我运行此代码时: from distributed import Client client = Client('ip') import dask.array as da x = da.random.random((400000,400000), chunks=(10000, 10000)) y = da.exp(x).sum() y.compute() 它跑得很快,看起来效率很高: 但当我试图阅读拼花地板文件时 它运行

Dask在Dask.array.map_块中创建的进程数与块数相同

我无法解释为什么dask要为map_块中的每个任务创建一个进程。这是我的密码: 编辑:这是一个最小的可复制示例。我在Ubuntu18.04上运行它,但这应该是可以忽略的: import os from multiprocessing.pool import ThreadPool import dask import dask.array as da import h5py import numpy as np MY_USER_NAME = "myusername" EARTH_RADIUS

Dask 经常被杀的工人:熊猫_read_text-read-block-from-delayed

我在kubernetes上使用dask docker图像进行标准集群设置,但不使用dask helm图表。我尝试在集群上运行现有脚本,但似乎没有运行。它不断地抛出错误 集群详细信息:1个笔记本电脑、1个调度程序、1个工人和1个共享卷。 我读了一些关于被杀工人的帖子,所以我查看了日志,但没有弄清楚 distributed.worker-ERROR-None Traceback(最近一次调用):文件“/opt/conda/lib/python3.7/site packages/distributed

&引用;“内存区域过多”;Dask错误

当将Dask与Dask阵列一起使用时,我突然出现以下错误,我的内核死机/重新启动 控制台显示: BLAS : Program is Terminated. Because you tried to allocate too many memory regions 我在mac上用Anaconda和OpenBLAS。有什么想法吗 注意:这个问题是通过其他方式向我提出的,我在这里重复它以供将来参考简短回答 Dask和OpenBLAS都试图同时并行化。这会触发OpenBLAS中的检查,从而导致硬故障。

在专用dask工作进程上直接运行任务

下面是一个简单的代码片段:注释后跟####很重要 from dask.distributed import Client ### this code-piece will get executed on a dask worker. def task_to_perform(): print("task in progress.") ## do something here.. print("task is over.!") ### whereas the below

分布式Dask:获取;“属性错误”;使用setup.py安装后

您好,我想从头开始构建分布式磁盘 我读了说明书 但是经过这些步骤,我得到了错误 当我使用pytestdistributed--verbose 文件“/Users/bielefem/Dev/dask/distributed/distributed/init.py”,第3行,在 从…起导入配置 文件“/Users/bielefem/Dev/dask/distributed/distributed/config.py”,第13行,在 config=dask.config.config Attribut

在dask数据帧中使用行号作为索引,使用chunksize和skiprows筛选输入文件

我有大约70gb的MD模拟输出。文件中定期重复的固定行数解释和固定行数数据的模式。如何逐块读取Dask数据帧中忽略解释行的文件 我成功地在pandas.read_csv的skiprows参数中编写了一个lambda函数,以忽略解释行,只读取数据行。我将熊猫输入的代码转换为dask one,但它不起作用。在这里,您可以看到通过将pandas.read_csv替换为dd.read_csv编写的dask代码: #首先提取原子数,进而提取数据线数: 以open(filename[0],mode='r')

监视dask xarray性能

我有以下基本代码,我认为应该设置xarray以使用LocalCluster from dask.distributed import Client client = Client("tcp://127.0.0.1:46573") # this points to a LocalCluster import xarray as xr ds = xr.open_mfdataset('*.nc', combine='by_coords') # Uses dask to defer actually

是否有可能对Dask操作的执行时间进行估计

我知道这对于运行代码的环境来说是非常特殊的,但是如果dask在DAG中提前计算其执行计划,有没有办法理解执行需要多长时间 运行执行后,进度条会有很大的帮助,但是否可以事先了解一系列操作需要多长时间?简短回答 没有 解释 Dask调度程序只执行Python函数。它不考虑它们来自何处,也不考虑它们所代表的更广泛的上下文(例如,数据帧连接或矩阵乘法)。从它的角度来看,它刚刚被要求执行一个不透明函数调用图。这种通用性是一个弱点(难以执行高级分析),但也是Dask的主要优势,因为它可以应用于任何特定领域或

适用于dask行李的操作变更单

我正在使用一个dask包来处理从一组实验中收集的痕迹数据处理的并行化。每次实验的数据文件路径都会转换为自定义对象,我对此类数据执行的常见操作是对象方法 每个物体都有一个与特定实验相关的识别号。在程序中的某个时刻,我想用这个ID号来删除一些实验。在这个任务图中,从一个序列创建一个对象,然后应用去趋势化和反褶积函数,然后执行删除操作 因为实验标识号是静态的,所以可以在任务图中的任何步骤执行删除操作,最终结果将是相同的。但是,如果按照其他计算成本高昂的方法执行删除操作,则结果会慢得多,因为这些计算是

向Dask调度程序/工作人员控制台日志添加/启用时间戳

是否有方法向Dask调度程序/工作人员控制台日志添加/启用时间戳 dask:0.15.0-py35_0 分发:1.17.1-py35_0 如果我使用上述版本,则不会启用- 调度程序- distributed.scheduler - INFO - ----------------------------------------------- distributed.scheduler - INFO - Scheduler at: tcp://192.168.200.23:8600 distri

将纯python模块推送到Dask工作者

在Dask中有没有一种简单的方法可以将纯python模块推送到工作人员手中 我在一个集群中有许多工作人员,我想分发我在客户端上拥有的本地模块。我知道对于像NumPy或Python这样的大型软件包,我应该以一种更健壮的方式分发东西,但是我有一个经常更改的小模块,它不需要太多的工作来移动。是的,使用这种方法 此方法将分发文件,如果文件以.py或.egg结尾,则还将在每个Worker上导入并重新加载模块。是,请使用此方法 此方法将分发文件,如果文件以.py或.egg结尾,则还将在每个辅助进程上导入并重

dask read_拼花地板,带pyarrow记忆放大

我用dask写和读拼花地板。我使用fastparquet引擎写作,使用pyarrow引擎阅读。 我的工人有1GB内存。使用fastparquet时,内存使用情况很好,但当我切换到pyarrow时,它会爆炸并导致工作程序重新启动。 下面我有一个可复制的示例,它在1gb内存限制的工作进程上使用pyarrow失败。 实际上,我的数据集比这个大得多。使用pyarrow的唯一原因是,与fastparquet(大约7x-8x)相比,它在扫描时提高了速度 dask:0.17.1 pyarrow:0.9.0.p

dask数据帧';s read_csv can';无法正确读取csv

dask的read_csv()函数不能一次正确读取所有csv,但dask_cudf可以 da=dd.read\u csv(os.path.join('data','*.csv')) 打印(da.head()) 您能提供错误消息并以可能被复制粘贴的格式输入数据吗?您能提供一个吗?@gbajson没有错误消息。dask无法正确读取文件,并且具有Nan值。输入数据:时间戳、投标价格、Askprice、Bidvolume、Askvolume 20040101 22:00:498,1.2542,1.254

dask:关闭<;TCP如何重新启动本地群集?

使用启动daskLocalCluster时 from dask.distributed import Client client = Client() 在中断jupyter内核并重新运行celldask之后,会反复显示以下警告 distributed.comm.tcp - WARNING - Closing dangling stream in <TCP local=tcp://127.0.0.1:49408 remote=tcp://127.0.0.1:37487> dist

上一页   1   2   3    4   5   6  ... 下一页 最后一页 共 14 页