python-2.7 - 使用 Python Cassandra 驱动程序进行多个连接错误

标签 python-2.7 cassandra-2.0 datastax

我正在使用 Datastax 提供的 Python Cassandra 驱动程序连接到单节点 Cassandra 实例。我的 Python 代码生成多个进程(使用多处理模块),每个进程都会打开与该节点的连接,并在退出时将其关闭。

这是我观察到的行为:当生成的进程数量较少(比如大约 30)时,我的代码运行完美。但是当数字更大时,我会看到这样的错误(可能并不奇怪):

File "/usr/local/lib/python2.7/dist-packages/cassandra/cluster.py", line 755, in connect
self.control_connection.connect()
File "/usr/local/lib/python2.7/dist-packages/cassandra/cluster.py", line 1868, in connect
self._set_new_connection(self._reconnect_internal())
File "/usr/local/lib/python2.7/dist-packages/cassandra/cluster.py", line 1903, in _reconnect_internal

raise NoHostAvailable("Unable to connect to any servers", errors)
NoHostAvailable: ('Unable to connect to any servers', {'127.0.0.1': error(99, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Cannot assign requested address")})

显然,主机无法接受新连接。这看起来应该由驱动程序或 Cassandra 来处理 - 让新的连接请求排队并在释放时授予它们。

我该如何实现这种行为?

最佳答案

“无法分配请求的地址”可能表明您的本地端口已用完。这不取决于驱动程序——这是系统配置问题。 Here is a good article about the problem (它指的是MySQL,但问题是相同的)。请注意,处于 TIME_WAIT 状态的连接会占用本地端口,并且可能会在单个程序运行之后持续存在。

本文讨论了多种解决方案,包括扩展端口范围、监听多个 IP 地址或更改应用程序连接行为。我会考虑应用程序行为,并建议运行更少的进程。根据您试图通过多处理克服的问题,您可能最好使用(进程数)<=(机器核心)(这是 multiprocessing.Pool 的默认行为)。

关于python-2.7 - 使用 Python Cassandra 驱动程序进行多个连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31296911/

相关文章:

python - 2 个向量中所有点之间的欧氏距离

cassandra - 向 Cassandra 集群添加节点

java - Spring Cassandra 模型映射

amazon-ec2 - EC2 AMI 2.4/2.5 dsc20/dsc21 依赖问题

python - 如何在Python中正确加载数据文件

python - 为python进程保留ram

python - 如何改变python中参数的值?

events - 用于连续查询的 Cassandra(+ Spark?)的最佳方法?

java - 在 Java 中使用 cassandra 2.0.8 有哪些选项

amazon-ec2 - Datastax Opscenter - 代理未连接