jsa*_*yce 6 json python-requests dask dask-distributed dask-kubernetes
这只是在远程 Dask kubernetes 集群中重现内存泄漏问题的示例最小测试。
def load_geojson(pid):
import requests
import io
r = requests.get("https://github.com/datasets/geo-countries/raw/master/data/countries.geojson")
temp = r.json()
import sys
size_temp = sys.getsizeof(temp)
del temp
return size_temp
L_geojson = client.map(load_geojson, range(200))
del L_geojson
Run Code Online (Sandbox Code Playgroud)
观察:每次运行时工作内存(字节存储)稳定增加约 30 MB,并持续增加直到使用整个内存。我用 urllib 尝试的另一个测试,我观察到每次运行时内存随机增加和减少。
预期行为:删除引用 L_geojson 后应清理内存。
有人可以帮忙解决这个内存泄漏问题吗?
我可以确认内存增加和“完整垃圾收集最近占用了 X% CPU 时间”消息。如果我允许期货运行,内存也会增加,但速度会更慢。
正如您在使用中发现的那样,使用fsspec不存在此问题urllib,这就是 Dask 通常用于其 IO 的方式(fsspec从通信切换为requests使用aiohttp)。
您修改后的函数可能看起来像
def load_geojson(pid):
import fsspec
import json
fs = fsspec.filesystem("http"). # or use fsspec.open
r = fs.cat("https://github.com/datasets/geo-countries/raw/master/data/countries.geojson"). # get bytes
temp = json.loads(r)
import sys
size_temp = sys.getsizeof(temp)
del temp
return size_temp
Run Code Online (Sandbox Code Playgroud)
但您仍然会收到垃圾收集警告。
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |