我已经在python中使用单例设计模式创建了redis池实例。
class RedisPool:
pool = None
@classmethod
def get_connection_pool(cls, startup_nodes):
if cls.pool == None:
cls.pool = ConnectionPool(host = startup_nodes['host'], port = startup_nodes['port'], db = 0, password = startup_nodes['password'])
return cls.pool
据我从redis文档了解,我们应该有单个池实例,这就是为什么我们使用singleton的原因。但是,python脚本中的流程之一使用spark-submit执行scala脚本,该脚本使用redis连接来转储一些数据。如何使用我在python脚本中创建的相同池实例在scala中使用它。
答案 0 :(得分:1)
否,您的scala脚本无法重用python中定义的连接池。
Python的连接池仅在单个进程中有效。当您从python调用scala脚本时,实际上是在启动一个新进程。此新进程无权访问连接池。
您将必须将redis主机/端口/密码从python传递到scala,并且您的scala脚本将必须创建另一个与redis的连接。
要改善这一点,您可以使scala进程本身与它自己的连接池一起长期存在。然后公开一些“ api”供python进程调用。