正如其他人所說的那樣,分析你的代碼,看看它爲什麼很慢。該cProfile
模塊in conjunction with the gprof2dot
tool可以產生很好的可讀信息
沒有看到你的速度慢的代碼,我可以猜到一些東西,這可能有助於:
首先是你大概可以使用內置的字符串的方法,而不是一個正則表達式的脫身 - 這可能稍微快一點。如果你需要使用正則表達式,那麼在主循環外部預編譯是值得的re.compile
其次是不要做一個插入查詢每行,而是做批量插入,例如添加解析信息到列表,然後當它達到一定的大小,用executemany
方法執行一次INSERT查詢。
一些不完整的代碼,如上面的例子:
import fileinput
parsed_info = []
for linenum, line in enumerate(fileinput.input()):
if not line.startswith("#DEBUG"):
continue # Skip line
msg = line.partition("MSG")[1] # Get everything after MSG
words = msg.split() # Split on words
info = {}
for w in words:
k, _, v = w.partition(":") # Split each word on first :
info[k] = v
parsed_info.append(info)
if linenum % 10000 == 0: # Or maybe if len(parsed_info) > 500:
# Insert everything in parsed_info to database
...
parsed_info = [] # Clear
來源
2013-08-29 13:41:26
dbr
你能發佈日誌行和模式的爲例你正在尋找? –
格式將類似於「#DEBUG :: BFM [L4] 5.4401e + 08ps MSG DIR:TX SCB_CB TYPE:DATA_REQ CPortID:'h8 SIZE:'d20 NumSeg:'h0001 Msg_Id:'h00000000'且reg ex爲」。 DEBUG。*味精。「首先,我將使用空格將其分割,然後將「字段:值」模式插入到數據庫中。 – user2109788
你可能更適合使用一個處理數據流的程序,比如'sed'。 –