答案 0 :(得分:0)
我快速查看了源代码,如果两个线程同时运行parser.parse(),看起来像Parser对象的状态很容易被破坏。这是Parser.parse的样子:
def parse(self, text, html=True):
'''Parse the text and return a ParseResult instance.'''
self._urls = []
self._users = []
self._lists = []
self._tags = []
reply = REPLY_REGEX.match(text)
reply = reply.groups(0)[0] if reply is not None else None
parsed_html = self._html(text) if html else self._text(text)
return ParseResult(self._urls, self._users, reply,
self._lists, self._tags, parsed_html)
该方法所做的第一件事是清除一堆包含已解析结果的内部列表。如果你在一个线程中调用parse(),并且在完成的过程中(因此填充了一些内部列表,但仍在完成工作),则在另一个线程中调用self.parse(),所有这些列表都将被清除,这将废弃第一个线程的结果。您最终会将每个线程的结果混合到第一个和第二个线程中。
我认为您需要为每个线程创建一个Parser()实例。