twitter-text-python线程安全吗?

时间:2014-04-17 14:35:31

标签: python multithreading twitter

我正在使用twitter-text-python

创建Parser实例是否是线程安全的:

from ttp import ttp
parser = ttp.Parser()

然后在各种线程中使用它?

1 个答案:

答案 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()实例。