我正在编写一个机器人,分析最近制作的reddit评论,我正在努力提高处理单个评论所需的速度。机器人将循环通过500条评论,然后在一定的等待期后再用另外500条重复该过程。毫无疑问,其中一些评论将会重复,因此我有一个评论ID的缓存,机器人可以检查。据我所知,这可能会很费时,特别是当缓存增加时(每个周期增加约500个实体),所以我想知道应该把扫描放在哪里。
在我目前正在查看的代码部分中,有两种方式可以取消评论和跳过评论:要么在缓存中找到了它的ID:
if getCommentLink(comment) in completedComments:
addToLog("[Error 101] " + str(datetime.datetime.now().time()) + " comment already in cache",False)
else:
...
或者它不包含我要找的字符串模式:
begOfBotCallFound = botCallFormatBeg.lower() in commentText
endOfBotCallFound = botCallFormatEnd.lower() in commentText
if begOfBotCallFound == True and endOfBotCallFound == True:
botCallInGoodFormat = (commentText.index(botCallFormatBeg.lower()) + len(botCallFormatBeg) + minimumCharsBetweenBegAndEnd) < commentText.index(botCallFormatEnd.lower())
if botCallInGoodFormat == True:
foundRequest = True
if foundRequest == False:
addToLog(str(datetime.datetime.now().time()) + " failed request search - beginning found: " + str(begOfBotCallFound) + ", end found: " + str(endOfBotCallFound) + ", good format: " + str(botCallInGoodFormat),False)
else:
...
我知道我可能会在后一种说法中使用正则表达式,但我试图避免它,除非我确定它会更快地处理(我对正则表达式不熟练)。
经过测试,首先使用缓存检查,然后字符串搜索每个帖子产生大约1.8秒。反向产生每个帖子1.4-2.3秒(可能根据评论的时间长短而变化)。我担心的是,随着缓存大小的增加,可能更希望采用后一种方法。
我的问题是,在目前所做的搜索缓存中,在什么时候比在可变长度注释中搜索字符串模式要慢?我的缓存列表必须有多大才能成为这种情况(不是寻找特定的数字)?