python3 带有 mysql 连接的 nameko RPC 服务器
python3 nameko RPC server with mysql connection
我尝试使用 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)"cannot connect mysql server"。我可以只使用一个连接吗?
您有挂起的数据库连接,您需要在请求结束时关闭 () 数据库。
@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)
您应该使用 nameko-sqlalchemy 等 DependencyProvider 来连接数据库。
在 __init__
中实例化 MySQL 连接意味着每次 RPC 方法触发时您都会创建一个新连接,可能意味着您 运行 没有连接。
我尝试使用 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)"cannot connect mysql server"。我可以只使用一个连接吗?
您有挂起的数据库连接,您需要在请求结束时关闭 () 数据库。
@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)
您应该使用 nameko-sqlalchemy 等 DependencyProvider 来连接数据库。
在 __init__
中实例化 MySQL 连接意味着每次 RPC 方法触发时您都会创建一个新连接,可能意味着您 运行 没有连接。