博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Thrift文件加载
阅读量:5366 次
发布时间:2019-06-15

本文共 1157 字,大约阅读时间需要 3 分钟。

一、简述

通过前面的分析,我们知道无论是创建一个客户端还是服务器,第一步要做的就是调用thriftpy.load对thrift文件进行解析,并在内存中构建相应的module,本文将对load方法进行一个简单的分析。

二、load方法分析

  • load方法关键代码如下,该方法调用了parser模块中的parse方法对thrift文件进行解析,返回Thrift对象,并将该对象添加到sys.modules中(如果指定了module_name)
def load(path, module_name=None, include_dirs=None, include_dir=None):    real_module = bool(module_name)    thrift = parse(path, module_name, include_dirs=include_dirs,                   include_dir=include_dir)    if real_module:        sys.modules[module_name] = thrift    return thrift
  • parser模块的parse函数主要完成以下工作

    1. 初始化词法分析器 Lex和语法分析器 Yacc
    2. 读取文件内容保存到data变量中
    3. 创建一个空的module,并完成初始化 
      thrift = types.ModuleType(module_name) 
      setattr(thrift, '__thrift_file__', path)
    4. 调用语法分析器Yacc的parse方法对文件内容进行分析 
      parser.parse(data)
  • 语法分析说明

    Thriftpy使用ply模块中的Lex和Yacc对thrift文件进行分析,关于该模块的使用方法这边不做详细介

    • thriftpy/parser/lexer.py文件中定义了词法分析规则
    • thriftpy/parser/parser.py文件中定义了语法分析规则,如:当语法分析器发现service语法时,将会调用p_simple_service方法对service内容进行解析生成对应的object,并将该object添加到前面创建的module中

三、其他加载方法

其他加载方法与load方法主要差别在于文件的读取方式,关键的解析部分完全一致 

* load_fp方法 
* load_module方法

四、小结

  • Thriftpy通过ply库中的Lex和Yacc完成thrift文件解析,并根据thrift文件内容在内存中构建出相应的module
 

转载于:https://www.cnblogs.com/navysummer/p/9122671.html

你可能感兴趣的文章
vue-cli搭建项目
查看>>
开发一个支持多用户在线的FTP程序
查看>>
Linux下tail命令的使用方法
查看>>
jdk的安装和java的入门概念
查看>>
http://www.itpub.net/thread-1778530-1-1.html
查看>>
[转]Linux下的Makefile
查看>>
oracle执行代码段以及表分区
查看>>
[LeetCode] Remove Element
查看>>
c++ STL总结一:vertor和list
查看>>
python下载代码
查看>>
递归函数
查看>>
简直要逆天!超炫的 HTML5 粒子效果进度条
查看>>
分享5种风格的 jQuery 分页效果【附代码】
查看>>
TCP系列20—重传—10、早期重传(ER)
查看>>
IOS-TextField控件详解
查看>>
[置顶] ios App 中嵌入应用商店
查看>>
java多线程编程——同步器Exchanger
查看>>
web 框架
查看>>
Gym 101350G - Snake Rana
查看>>
信息安全系统设计基础exp_5
查看>>