Способ ускорить 19 обращений к geo pandas .read_file ()? - PullRequest
0 голосов
/ 20 марта 2020

У меня есть некоторый (еще один) код, который вызывает geopandas.read_file(), чтобы прочитать 19 шейп-файлов общим объемом около 2,7 ГБ, что занимает около минуты, и я хотел бы знать, есть ли способ ускорить его.

Единственное, о чем я подумал, - это попытка асинхронно загрузить 19 шейп-файлов, но мне кажется, что для этого мне пришлось бы разветвить geo pandas и создать собственную функцию чтения.

Кто-нибудь знает, если проще?

Большое спасибо.

1 Ответ

0 голосов
/ 21 марта 2020

Вы можете получить повышение производительности с потоками, где вы получите некоторое перекрытие в циклах чтения / процесса и параллельном выполнении, когда geo pandas выполняет работу в расширении C без глобальной блокировки интерпретатора (GIL). Я не думаю, что это будет драматизм c, но стоит попробовать

import multiprocessing as mp
import multiprocessing.pool
import geopandas

files_to_read = ["foo", "bar", "baz"]

# guessing a max of 4 threads would be reasonable since much of read_file
# will likely be done in a C extension without the GIL
pool=mp.pool.ThreadPool(min(mp.cpu_count(), len(files_to_read), 4))
frames = pool.map(geopandas.read_file, files_to_read, chunksize=1)
pool.close()
...