首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PIL resize()是否拥有GIL?

PIL resize()是否拥有GIL?
EN

Stack Overflow用户
提问于 2012-11-06 07:41:33
回答 2查看 858关注 0票数 4

示例:

代码语言:javascript
复制
image = Image.open('foo.png')
# releases the GIL?
resized = image.resize((800, 600), Image.ANTIALIAS)
# reacquires the GIL?

显然,变量赋值需要保存GIL,但很难将其分成两行。:)

如果有两个线程执行图像大小调整,那么这些大小调整可以在两个不同的内核上运行吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-11 11:00:33

看一下1.1.7的源代码,它似乎并没有为_resize发布GIL。

释放GIL的函数似乎是:

代码语言:javascript
复制
PyImaging_CreateWindowWin32 (createwindow on Win32)
PyImaging_EventLoopWin32 (eventloop on Win32)
pyCMSdoTransform (apply)
_buildTransform (buildTransform)
_buildProofTransform (buildProofTransform)
_encode_to_file (encode_to_file)
票数 3
EN

Stack Overflow用户

发布于 2012-11-06 08:51:33

Python wiki on the GIL中:

请注意,潜在的阻塞或长时间运行的操作,如I/O、图像处理和NumPy数字处理,发生在GIL之外。因此,只有在花费大量时间在GIL中解释CPython字节码的多线程程序中,GIL才会成为瓶颈。

PIL使用C扩展来完成大部分繁重的任务。因此,如果适用的话,实际的图像调整应该利用多线程。

如果您正在询问如何同时调整多个图像的大小,我建议您考虑使用Python的原生multiprocessing库。这应该会达到使用多核的预期效果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13242221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档