python3namekorpc服务器与mysql连接

rdlzhqv9  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(305)

我尝试使用nameko rpc服务器从mysql读取数据。这是服务器代码。

class SendService:
    name = 'url_feature_rpc_service'
    def __init__(self):
        print('new connection')
        self.db = MySQLdb.connect(host="localhost", user="user", passwd="123456", db="today_news", charset='utf8')
        self.cursor = self.db.cursor()

    @rpc
    def get_feature(self, url):
        sql = 'select title_seg, entity_seg, title_entity_vec from article_feature where url_md5 = md5(\'{}\')'.format(url)
        self.cursor.execute(sql)
        result = self.cursor.fetchone()
        if result == None:
            return ''
        return '\t'.join(result)

以下是客户代码:

with ClusterRpcProxy(config) as cluster_rpc:
    for line in sys.stdin:
        line = line.strip()
        try:
            result = cluster_rpc.url_feature_rpc_service.get_feature(line)
        except Exception as e:
            print(e)

我的问题是每次我调用rpc服务时,它都会建立一个新的连接。我有时会遇到mysql错误(99)“无法连接mysql服务器”。我只能使用一个连接吗?

2izufjch

2izufjch1#

如果数据库连接挂起,则需要在请求结束时关闭数据库()。

@rpc
def get_feature(self, url):
    sql = 'select title_seg, entity_seg, title_entity_vec from article_feature where url_md5 = md5(\'{}\')'.format(url)
    self.cursor.execute(sql)
    result = self.cursor.fetchone()
    self.db.close()
    if result == None:
        return ''
    return '\t'.join(result)
4ngedf3f

4ngedf3f2#

您应该使用诸如nameko sqlalchemy之类的dependencProvider来连接到数据库。
示例化内部的mysql连接 __init__ 意味着每次rpc方法触发时都要创建一个新连接,可能意味着连接即将用尽。

相关问题