Cassandra Python 驱动程序的问题是返回的“未来”对象通过副作用添加回调。这意味着“未来”是不可组合的,就像Future
来自 Javascript 或 Scala 的 a 是可组合的一样。我想知道是否有一种模式可用于将不可组合的未来转变为可组合的未来(最好没有泄漏内存。)
my_query_object.insert(1, 2, 3, 'Fred Flinstone')
.insert(1, 2, 3, 'Barney Rubble')
.insert(5000, 2, 3, 'George Jetson')
.insert(5000, 2, 3, 'Jane his wife')
查看Datastax 的 Cassandra Python 驱动程序的性能部分,我看到了他们如何创建一系列可连续链接的插入查询的示例。即这种模式的稍微复杂的版本:
def insert_next(previous_result=sentinel):
if previous_result is not sentinel:
if isinstance(previous_result, BaseException):
log.error("Error on insert: %r", previous_result)
future = session.execute_async(query)
# NOTE: this callback also handles errors
future.add_callbacks(insert_next, insert_next)
作为玩具示例非常有用。完成一个查询后,将再次执行另一个等效查询。该方案允许他们实现 7k 写入/秒,而不尝试“链接”回调的版本限制在 2k 写入/秒左右。
我一直在努力创造某种机制,使我能够重新获得确切的机制,但无济于事。有人想出类似的东西吗?