[英]Reading and writing out of core files sequentially multi-threaded with Python
[英]Python reading data from CSV in memory and writing it to cassandra in multi threaded
我對python有點陌生,我當前的代碼下載了csv文件,並以單線程的形式將其導入cassandra中。 有沒有一種方法可以創建5個或10個線程來拆分csv文件(行)並並行讀取並在Cassandra中將行插入每個線程一行? ,我正在嘗試創建一個股票交易數據庫來存儲所有的報價數據庫,從而尋找提高代碼和方法性能的方法。 如果問題聽起來有點愚蠢,請忽略我。
conn = requests.get(url, stream=True)
if conn.status_code == 200:
zfile = zipfile.ZipFile(io.BytesIO(conn.content))
zfile.extractall()
with open(csv_file) as csv_d:
csv_content = csv.reader(csv_d)
for row in csv_content:
symbol = row[0]
stype = row[1]
openp = row[2]
highp = row[3]
lowp = row[4]
closep = row[5]
vol = row[8]
dtime = row[10]
cassa.main('load', symbol, dtime, stype, openp, highp, lowp, closep, vol)
csv_d.close()
os.remove(csv_file)
logging.info("csv file processed succesfully")
感謝和問候
如果您碰巧使用了DataStax Python驅動程序,則除了同步API外,這還將為您提供一個異步API。 使用異步API,您可以嘗試一系列不同的方法:
在本文檔中,您可以找到更多有關如何實現此目標的想法。
我在Java中執行此操作的方式(我認為python會類似)是使用工作線程池。 您將在執行操作時在單個線程中讀取csv文件,但是在for循環中,您將把每一行分派到線程池中的線程。
工作線程將對它們的單行進行同步插入並返回。
線程池的大小控制您將並行運行多少個插入。 在某種程度上,工作池越大,整個文件的導入就會越快(受群集的最大吞吐量限制)。
另一種方法是使用單個線程並使用異步模式進行插入。 在Java中,它稱為executeAsync,它將CQL語句發送到Cassandra,並立即返回而不會阻塞,從而使您獲得與並行運行的許多插入相同的效果。
您也可以考慮使用“從文件.file.csv復制...”。 CQL命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.