使用在python和scala中创建的相同Redis池实例

时间:2018-12-19 09:41:52

标签: python scala apache-spark redis

我已经在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中使用它。

1 个答案:

答案 0 :(得分:1)

否,您的scala脚本无法重用python中定义的连接池。

Python的连接池仅在单个进程中有效。当您从python调用scala脚本时,实际上是在启动一个新进程。此新进程无权访问连接池。

您将必须将redis主机/端口/密码从python传递到scala,并且您的scala脚本将必须创建另一个与redis的连接。

要改善这一点,您可以使scala进程本身与它自己的连接池一起长期存在。然后公开一些“ api”供python进程调用。