尊敬的xarray python用户:
我有一段代码,其中加载了一些xarray数据集,在函数之间传递,通过计算创建,最后写入。 这些操作必须以可操作的方式在全球多个地区进行。由于每个区域都是独立的(没有加载相同的数据),我可以使用main创建线程(使用多处理工具箱)或在单独的终端中手动启动不同的区域
当我启动一个区域时,我有合理的处理时间。函数线程内没有任何多处理,因此在我的htop中,它只使用8个可用cpu核上的1个cpu核,并且代码的cProfile将导致以下结果:
Thu Jul 30 10:54:01 2020 Tahiti.txt
2190436 function calls (2150695 primitive calls) in 131.330 seconds
Ordered by: cumulative time
List reduced from 9195 to 10 due to restriction <10>
ncalls tottime percall cumtime percall filename:lineno(function)
1722/1 0.013 0.000 131.332 131.332 {built-in method builtins.exec}
1 0.049 0.049 131.332 131.332 main_b_GHI_Tahiti.py:1(<module>)
1 0.529 0.529 65.203 65.203 /home/ubuntu/SteadySat/Codes/steadysat-python/dev/Irradiance/base_pvlib.py:43(pvlib_turbidity_optim)
1 29.864 29.864 60.960 60.960 /home/ubuntu/SteadySat/Codes/steadysat-python/dev/cloud_forecast/Cloud_Forecasting.py:71(Cloud_Wind)
34 1.664 0.049 54.530 1.604 /home/ubuntu/SteadySat/Codes/steadysat-python/dev/Irradiance/base_pvlib.py:97(Projection_ombre)
34 38.775 1.140 42.352 1.246 /home/ubuntu/SteadySat/Codes/steadysat-python/dev/Irradiance/base_pvlib.py:124(Projection_ombre_optim)
1 3.268 3.268 23.795 23.795 /home/ubuntu/SteadySat/Codes/steadysat-python/dev/cloud_forecast/Cloud_Forecasting.py:135(Wind_Map)
34 0.000 0.000 20.541 0.604 /home/ubuntu/anaconda3/envs/steadysat/lib/python3.7/site-packages/scipy/io/matlab/mio.py:83(loadmat)
13 0.000 0.000 20.496 1.577 /home/ubuntu/anaconda3/envs/steadysat/lib/python3.7/site-packages/scipy/io/matlab/mio5.py:254(get_variables)
13 0.000 0.000 20.493 1.576 /home/ubuntu/anaconda3/envs/steadysat/lib/python3.7/site-packages/scipy/io/matlab/mio5.py:235(read_var_array)
现在,如果我启动两个或多个区域(在不同的终端中,相同的代码),计算时间会慢得多(这里是时间2,我必须慢8倍),htop显示进程在D状态下花费了很长时间(等待),cpu的工作效率不高。我必须精确地指出,相同的代码,使用相同的消耗操作,但使用非优雅的numpy实现可以很好地工作(在计算多个区域时没有实际的时间损失)。 在本例中,cProfile显示了完全不同的结果,因为排名前十的不是我耗时的函数,而是xarray
Thu Jul 30 09:31:14 2020 Tahiti.txt
2190294 function calls (2150553 primitive calls) in 358.310 seconds
Ordered by: cumulative time
List reduced from 9195 to 10 due to restriction <10>
ncalls tottime percall cumtime percall filename:lineno(function)
1722/1 0.012 0.000 358.313 358.313 {built-in method builtins.exec}
1 0.030 0.030 358.313 358.313 main_b_GHI_Tahiti.py:1(<module>)
6017/4415 0.142 0.000 234.321 0.053 {built-in method numpy.array}
4142/2546 0.003 0.000 234.198 0.092 /home/ubuntu/anaconda3/envs/steadysat/lib/python3.7/site-packages/numpy/core/_asarray.py:16(asarray)
111/109 0.001 0.000 234.172 2.148 /home/ubuntu/anaconda3/envs/steadysat/lib/python3.7/site-packages/xarray/core/indexing.py:555(__array__)
109 0.001 0.000 234.163 2.148 /home/ubuntu/anaconda3/envs/steadysat/lib/python3.7/site-packages/xarray/backends/netCDF4_.py:71(__getitem__)
109 0.003 0.000 234.162 2.148 /home/ubuntu/anaconda3/envs/steadysat/lib/python3.7/site-packages/xarray/core/indexing.py:809(explicit_indexing_adapter)
109 0.002 0.000 234.151 2.148 /home/ubuntu/anaconda3/envs/steadysat/lib/python3.7/site-packages/xarray/backends/netCDF4_.py:76(_getitem)
109 234.122 2.148 234.137 2.148 {built-in method _operator.getitem}
173 0.001 0.000 234.135 1.353 /home/ubuntu/anaconda3/envs/steadysat/lib/python3.7/site-packages/xarray/core/dataarray.py:555(values)
如果有人知道是什么原因导致了这个问题,那将是非常有帮助的。我只在datarray上使用了很少的函数:open_dataset,sel,to_netcdf,但我可以看到,在begging中,只使用open_dataset和sel,计算时间增加了
提前谢谢
目前没有回答
相关问题 更多 >
编程相关推荐