Python是否是线程安全的?

时间:2013-07-11 08:29:10

标签: python regex

我尝试使用谷歌搜索,但没有得到权威的答案。

有人可以确认re模块http://docs.python.org/2/library/re.html 是线程安全的吗?

更具体地说,哪些功能是哪些功能?哪些功能不是?

另外,我可以重用一个全局编译的re对象来安全地跨线程执行subsearch等吗?

好像还没有明确答案?

好的,更具体的例子:

  class MyClass:
     GLOBAL_VAR = re.compile(...)

     def clean(self, value):
        return MyClass.GLOBAL_VAR.sub('', value) 

当多个线程同时调用clean时,这是否会按预期工作?

2 个答案:

答案 0 :(得分:3)

我不认为 是一个权威的答案 - 除了在源代码中进行挖掘,它可以为现有版本的Python提供答案,但不一定是未来的版本 - 因为至少在某些部分正则表达式模块的某些版本是用C语言编写的(至少对于CPython;对于Jython,例如,谁知道?),似乎没有人对它们作出任何承诺。

在实践中,我还没有看到任何线程安全的RE代码位,而后面的GLOBAL_VAR.sub调用示例“几乎可以肯定”是线程安全的。但是......仍然缺乏书面承诺。 : - )

答案 1 :(得分:1)

是的,它们是线程安全的,因为函数之间只有一个_cache字典,每个函数都会使用它来查找生成的值,如果该值不在_cache中,函数将生成值并将其放入_cache字典,它不会违反线程安全