正如其他人所说,分析您的代码以了解它为什么慢。该cProfile
模块与该gprof2dot
工具一起可以产生很好的可读信息
在没有看到你的慢代码的情况下,我可以猜到一些可能有帮助的事情:
首先,您可能可以使用内置的字符串方法而不是正则表达式 - 这可能会稍微快一些。如果您需要使用正则表达式,则值得在主循环之外使用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