繁体   English   中英

基于资源锁定提高Python线程性能

[英]Improving Python Threads Performance based on Resource Locking

Java和Python线程之间的原因是

  • Java旨在锁定资源
  • Python旨在锁定线程本身(GIL)

因此,Python的实现在具有单核处理器的计算机上表现更好。 这在10到20年之前是可以的。 随着计算能力的提高,如果我们使用具有相同代码段的多处理器机器,它的性能将非常差。

是否有一些技巧可以禁用GIL并在Python中使用资源锁定(类似于Java实现)?

PS我的应用程序当前正在Python 2.7.12上运行。 它是计算密集型的,具有较少的I / O和网络阻塞。 假设我不能在用例中使用multiprocessing

我认为对您来说,最直接的方法就是使用Cython,这也会给您带来不错的性能提升。

Cython是一个Python超集,可将类似Python的代码编译为C代码(利用cPython API),然后从那里编译为可执行代码。 它允许选择键入变量,然后可以使用本机C类型而不是Python对象-并允许直接控制GIL。

它确实支持with nogil:语句,其中with块在GIL关闭的情况下运行-如果有其他线程在运行(您使用常规的Python线程库),则在标记为的代码上运行代码时,它们不会被阻塞。块。

只需记住GIL的存在是有原因的:正是由于这个原因,全局复杂对象(如列表和字典)才能工作而不会在踏步之间进入不一致状态的危险。 但是,如果您的“ nogil”块将自己限制在本地数据结构中,那么您应该没有问题。

检查Cython项目-这是关闭GIL的特定示例: https : //lbolla.info/blog/2013/12/23/python-threads-cython-gil

暂无
暂无

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

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