1

我有一个典型的宽列族,其中包含 {rowkey--> uuid4+date 和时间序列数据作为列},我在其上使用 pycassa xget() 调用实现了基于范围的查询。并不是说我受到单线程代码性能不佳的困扰,我更想了解当 xget() 调用是并行而不是顺序(从 for: 循环内部)进行时性能的差异。

我使用“线程”python 库来实现基于范围的查询的多线程版本,性能实际上大大降低。现在我知道 python GIL 对多线程代码的影响,但是有什么方法可以确定这实际上是由 GIL 引起的吗?可能是其他原因造成的吗?

提前致谢。

注意:我没有考虑“多处理”库,因为我无法为每个子进程使用不同的 ConnectionPool 对象。

4

1 回答 1

2

我会尝试的一件事是使用不同的buffer_sizekwarg值xget()(默认值为 1024)。

如果 GIL 是问题所在,您会看到进程的 CPU 使用率介于 ~90% 和 ~120% 之间。否则,您可能需要调整 ConnectionPool 的大小以确保每个线程至少有一个可用连接。

如果一切都失败了,请尝试分析您的应用程序: http: //docs.python.org/2/library/profile.html

于 2013-11-12T17:33:36.540 回答