调用多个thrift接口ttypes冲突的问题

我有一个thrift文件,名为importservice.thrift

执行命令

#thrift --gen py  importservice.thrift

生成了一个./gen-py/importservice目录

该目录下有一个ImportService.py文件

文件开头引入了

from thrift.Thrift import TType, TMessageType, TException, TApplicationException
import logging
from ttypes import *
from thrift.Thrift import TProcessor
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol, TProtocol

注意from ttypes import * 这行代码,它试图引入当前目录下的一个ttypes模块中的一个类, 我们假定为MyType1


同样,我还有另外一个thrift代码,他试图用

from ttypes import * 

引入另外一个类MyType2,然后使用

但是发现这第二个thrift里面找不到MyType2类,那原因也很显然, 上面这行代码里面从ttypes里面没有找到MyType2这个类,

这是为什么?

一个猜想是,第一个thrift引入的时候已经引入了ttypes, 而这个是属于第一个thrift的ttypes,它里面肯定是没有MyType2的,而第二个thrift在试图引入ttypes的时候发现已经被import了,那自然不会再import一次。

而我的应用在thrift的代码如下:

sys.path.append('./gen-py/importservice')
from SenseWordServiceV2 import *

不能用这个方式,应该改成如下方式:

sys.path.append('./gen-py/importservice')
from importservice.ImportService import *
from importservice.ttypes import *
from importservice.constants import *
这样,在引入ttypes的时候,可以因为是从父模块里面引入的,而两个thrift的ttypes的父模块不同,所以两个thrift的ttypes就可以区分开了,不会发生名称冲突的问题



猜你喜欢

转载自blog.csdn.net/u011734144/article/details/80067668