在Cython中,我試圖從具有10列的Cassandra表中獲取約600000行。然後我會遍歷所有這些。對於性能測試的目的,在這裏我已經在做read.pyx
:通過Cassandra的選擇ResultSet改進for-loop
from cassandra.cluster import Cluster
import pandas as pd
import time
cpdef int get_max_volume():
cluster = Cluster()
session = cluster.connect()
session.execute("USE trading")
rows = session.execute("SELECT * FROM fx WHERE ins='EURUSD' limit 600000")
max_vol = 0
start = time.time()
for i in rows:
max_vol = max(max_vol, i.volume)
print(max_vol)
print(time.time() - start)
return max_vol
採取的for循環是9.449406862258911s
時間。這個數字與純Python版本沒有太大差別。
我也試圖通過Pandas DataFrame的形式得到結果,但它變得更糟。許多來源指導我如何改進for-loop,將結果導入到DataFrame中,並改進通過DataFrame的迭代。但是將它們混合在一起會使代碼運行~25s
。
有沒有其他方法可以改善這個數字?查詢應保持不變。
任何建議表示讚賞。
爲什麼查詢需要保持不變?你需要來自所有10列的數據? – etemple1
正如我所說的,我只是測試for循環的性能,所以在這裏我只做一個簡單的操作。稍後,我可以使用其他列進行分析。所以不要介意查詢。如果你真的需要知道,當我獲取一列時,需要大約6秒鐘的時間。 –
不是Cython特有的,但我會試圖通過調用一次帶有可迭代的'max(i.volume for i in rows)'調用max來最小化調用。或者更好,但獲得與SQL的最大可能? – DavidW