使用pycurl多进程下载葵花卫星数据
在我为组里写的海雾反演工具包中,有一个葵花卫星数据下载的函数。因为葵花卫星数据是通过FTP方式下载的,而Python的requests库又不支持FTP协议,所以只好借助了pycurl来下载数据。
最近葵花数据的下载异常的慢,而pycurl似乎没有多线程下载的功能,pycurl对多线程的支持也不好,无奈只能自己想办法实现多进程下载的功能了。
原始版本
原始的下载代码实现起来非常简单,调用setopt()
函数依次设置好各个参数就可以下载数据了。这里只放出核心的代码部分。
CURL.setopt(pycurl.URL, ftp_url)
CURL.setopt(pycurl.NOPROGRESS, False)
CURL.setopt(pycurl.XFERINFOFUNCTION, ftp_callback)
if exists(f"{
save_path}/{
temp_filename}"):
open_type = "ab"
file_size = getsize(f"{
save_path}/{
temp_filename}")
CURL.setopt(pycurl.RESUME_FROM, file_size)
ftp_callback.set_start_size(file_size)
else:
open_type = "wb"
with open(f"{
save_path}/{
temp_filename}", open_type) as f:
CURL.setopt(pycurl.WRITEDATA, f)
try:
CURL.perform()
except pycurl.error