我想在Django中只打开一个与我的cassandra数据库的连接。 不幸的是,我没有找到关于这个主题的任何内容。
目前,每当我需要查询时,我都会上课:
class CassConnection():
def __init__(self):
self.auth_prov = PlainTextAuthProvider(settings.runtime_settings[k.CASSANDRA_USER],
settings.runtime_settings[k.CASSANDRA_PASSWORD])
self.cluster = Cluster(settings.runtime_settings[k.CASSANDRA_CLUSTER], auth_provider=self.auth_prov)
self.session = self.cluster.connect(keyspace=settings.runtime_settings[k.KEYSPACE_TIREREADINGS])
self.session.row_factory = dict_factory
def get_session(self):
return self.session
我在其他类中为每个查询打开一个新的Session:
self.con = CassConnection()
self.session = self.con.get_session()
任何提示,如何保持会话打开并通过多个包可以访问它?
答案 0 :(得分:0)
对于“每个Django进程一个连接”方案,基本上,你想要的是
最后一点很难成为主要难点,因为没有一个可用选项(主要是atexit.register()
和__del__(self)
方法)可靠性为101%。在您的连接代理上实现__del__(self)
可能仍然是最可靠的,只要注意循环依赖(http://eli.thegreenplace.net/2009/06/12/safely-using-destructors-in-python可能是一个很好的阅读)。
另请注意,“每个django进程一个连接”意味着您的连接必须完全是线程安全的,因为每个Django进程通常会有很多线程(取决于您的wsgi容器配置)。
另一个解决方案 - 如果线程安全问题 - 可能是每个请求只有一个连接...