摘 要
随着气象部门对数据传输时效要求不断提升,以及业务系统平台的不断扩展,对通过地面链路下载资料
的要求越来越高。本文主要利用
Python
语言中的
ftp
模块以及
Threading
模块实现气象资料的下载,
通过
ftp
模块实现资料的稳定下载以及
Threading
模块使用后的带宽充分利用,结合气象资料的特点提
出资料下载的方案,实现业务化应用,有效提升资料下载速度,加强气象资料的时效性。
关键词
Python;ftp
下载;多进程;多线程
doi:10.3969/j.issn.1672-9528.2019.01.008
* 赤峰市气象局 内蒙古赤峰 024000
0
引言
随着现代气象科技与大气探测技术的不断发展,气象资
料的数量、质量和应用水平等逐渐成为了国家气象业务和科
研水平的重要核心竞争力。气象资料收集的完整性、数据质
量的可靠性、数据产品的丰富性和良好的时效性等成为了发
达国家气象业务发展水平领先的关键环节之一,也是当前各
个国家气象部门气象资料业务与数据产品研发的发展方向。
天气预报和气候模式的发展和资料同化应用能力的提高
对观测资料的精度、时效提出越来越高的需求,相应的通过
地面链路下载资料的稳定性以及时效性要求就越来越高,频
次高、分辨率高的卫星资料以及数值预报产品等气象资料的
文件数量多、文件大以及文件生成时间集中等特点,更是对
下载过程的稳定以及高效提出了很高的要求。因此,业务化
应用的下载脚本,应该既能实现资料的稳定下载、更新下载,
又能实现充分利用带宽的多进程或者多线程下载。
1 Python
简介
Python
是一个高层次的结合了解释性、编译性、互动性
和面向对象的脚本语言。Python 的设计具有很强的可读性,
相比其他语言经常使用英文关键字,其他语言的一些标点符
号,它具有比其他语言更有特色语法结构。
Python
是一种解释型语言,在开发过程中没有了编译这
个环节。Python 是交互式语言,可以在一个
Python
提示符,
直接互动执行写你的程序。Python 也是面向对象语言,支持
面向对象的风格或代码封装在对象的编程技术。即使系统的
运行环境发生变化,
只需要把你的
Python
程序拷贝到另外一
台
WINDOWS
或者
LINUX
服务器上,它就可以工作了,这也使
得
Python
程序更加易于移植。
1.1 ftp
模块简介
Python
编程中使用
ftplib
模块的
FTP
对象,可以进行
方便的实现
FTP
客户端功能,可以轻松实现
FTP
的上传,下
载等操作。FTP
的工作流程及基本操作可参考协议
RFC959,
该协议规范通过设计简单易实现的协议来试图满足大型机、
小型机、个人工作站、TAC
等用户的需要。
1.2 Threading
模块简介
多进程与多线程都可用于实现并发。线程是程序执行的
最小单位,而进程是操作系统分配资源的最小单位,线程是
进程中的一部分,进程可包含多个线程在运行。由于线程比
进程更小,基本上不拥有系统资源,故对它的调度所付出的
开销就会小得多,能更高效的提高系统内多个程序间并发执
行的程度。
Python
中引入
Threading
模块用于提供线程相关的操作,
使线程并发运行并共享内存。模块中目标函数可以实例化一
个
Thread
对象,每一个
Thread
对象代表一个线程,通过模
块提供的函数对线程进行调度以及控制,线程高效运行的同
时,保证线程通信的安全性。
2 下载脚本设计
2.1
气象资料特点分析
通过地面链路下载的气象资料,以日本葵花
8
卫星资料
为例:日本葵花
-8
卫星有
16
个通道,是目前
MTSAT
系列卫
星的
3
倍,常规观测频次为
10
分钟,通过宽带网向国家级、
省级用户提供相关资料分发和下载服务,每日数据量百
G
左
右。其中葵花标准数据的圆盘图资料分
10
段提供,每
10
分
钟文件数量共
160
个,在网络行为管理设备的控制,带宽仍
有大部分闲余的情况下,单进程单线程无法及时的将每频次
的资料下载完成,对于资料均为大文件的数据更是难以在有
效时段内完成,而使用多进程或者多线程同时下载数个文件,
可有效提升带宽利用率,加快下载速度。
2.2 脚本编写