繁体   English   中英

Python 是线程安全的吗?

[英]Is Python re thread-safe?

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

有人可以确认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 时,这会按预期工作吗?

我不认为一个权威的答案,除了源,它可以帮助您解答了现有的Python版本,但不一定将来的,因为正则表达式模块的一些版本中至少某些部分被写在周围挖C(至少对于 CPython;例如,对于 Jython,谁知道呢?)而且似乎没有人对它们做出任何承诺。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM